博客
关于我
112. 路径总和(Javascript)
阅读量:730 次
发布时间:2019-03-21

本文共 1227 字,大约阅读时间需要 4 分钟。

学习算法,锻炼自我!记录自己的成长过程!

问题描述:作为一名刚接触算法的开发者,你被要求编写一个函数,判断一棵二叉树是否存在一条从根节点到叶子节点的路径,这条路径上的所有节点值之和等于指定的目标值。

解决思路:对于这个问题,可以采用前序遍历(即深度优先搜索,DFS)的方式,利用栈来记录当前的路径和。每当访问一个节点时,我们将该节点的值加到栈顶的累加值上,然后将右节点和左节点按照一定规则推入栈中。具体来说,在每次弹出栈顶元素时,我们首先处理右节点,接着处理左节点。这样可以确保前序遍历的顺序。随着深入遍历,我们可以逐步计算路径和。当到达叶节点时,检查路径和是否等于目标值。如果在任何一步满足条件,则立即返回true。如果遍历完整个树都未找到符合条件的路径,则返回false。

代码实现

function hasPathSum(root, targetSum) {    if (!root) {        return false; // 为空树则直接返回false    }    const stack = [ [root, root.val] ]; // 栈存储路径,其中每个元素包含节点和当前路径的累加和    while (stack.length > 0) {        const [currentNode, currentSum] = stack.pop(); // 弹出栈顶元素        // 处理右子节点        if (currentNode.right) {            stack.push( [currentNode.right, currentSum + currentNode.right.val] );        }        // 处理左子节点        if (currentNode.left) {            stack.push( [currentNode.left, currentSum + currentNode.left.val] );        }        // 检查是否到达叶节点        if (!currentNode.left && !currentNode.right) {            // 如果到达叶节点且当前路径和等于目标值,返回true            if (currentSum === targetSum) {                return true;            }        }    }    // 全部遍历完毕未找到符合条件的路径    return false;}

这段代码通过栈结构实现了前序遍历,同时在访问每个节点时维护了当前路径的累加和。当到达叶节点时,检查和是否等于目标值。这种方法不仅时间复杂度为O(n),空间复杂度也为O(h),非常高效。

转载地址:http://dasgz.baihongyu.com/

你可能感兴趣的文章
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
mysql 状态检查,备份,修复
查看>>