本文共 930 字,大约阅读时间需要 3 分钟。
学习算法,锻炼自我!记录自己的成长过程!
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
这道题的难度为简单,不过这道确实简单,这只需要前序遍历,并将每次的值保存起来,在到达叶节点的时候,比较判断就可以了,遍历二叉树,我一般都喜欢使用迭代的方式,而不是递归。
var hasPathSum = function (root, targetSum) { if (!root) { return false; }; //这里使用栈来存储值 const stack = [[root, root.val]]; while (stack.length) { const [r, val] = stack.pop(); //这里需要注意为什么先push右子节点了 //因为我们使用的是栈,后进先出的特点, //前序遍历:r->r.left->r.right //当左子节点后进的时候,它就会先遍历 if (r.right) { stack.push([r.right, r.right.val + val]); }; if (r.left) { stack.push([r.left, r.left.val + val]); }; //当遍历到叶子节点的时候,如果找到则返回true //如果未找到则继续查找 if (!r.left && !r.right) { if (val === targetSum) { return true; }; }; }; //没有找到则返回false return false;};
转载地址:http://dasgz.baihongyu.com/