标签:tree ram tco code 二叉树 efi ber color and
二叉树的路径和。题意是给一个二叉树和一个数字sum。求是否有这样一条路径可以使得二叉树从根节点到叶子节点经过的所有的节点值之和等于sum。此题可以用BFS和DFS两种做法解决,时间和空间复杂度都是O(n)。例子如下,
Example:
Given the below binary tree and
sum = 22
,5 / 4 8 / / 11 13 4 / \ 7 2 1return true, as there exist a root-to-leaf path
5->4->11->2
which sum is 22.
DFS,比较直观,直接上代码了。
1 /** 2 * Definition for a binary tree node. 3 * function TreeNode(val) { 4 * this.val = val; 5 * this.left = this.right = null; 6 * } 7 */ 8 /** 9 * @param {TreeNode} root 10 * @param {number} sum 11 * @return {boolean} 12 */ 13 var hasPathSum = function(root, sum) { 14 if (root === null) return false; 15 if (root.left === null && root.right === null) return sum === root.val; 16 return ( 17 hasPathSum(root.left, sum - root.val) || 18 hasPathSum(root.right, sum - root.val) 19 ); 20 };
BFS
用一个queue存储遍历到的节点。当加入某个节点的时候,如果这个节点没有孩子节点,需要判断加入这个节点之后的值是否等于sum;如果这个节点有孩子节点,接着遍历它的孩子节点,将cur.val + cur.left.val (cur.val + cur.right.val)加入queue。
1 /** 2 * @param {TreeNode} root 3 * @param {number} sum 4 * @return {boolean} 5 */ 6 var hasPathSum = function(root, sum) { 7 if (!root) return false; 8 let queue = [root]; 9 while (queue.length) { 10 let cur = queue.shift(); 11 if (!cur.left && !cur.right && cur.val === sum) { 12 return true; 13 } 14 if (cur.left) { 15 cur.left.val += cur.val; 16 queue.push(cur.left); 17 } 18 if (cur.right) { 19 cur.right.val += cur.val; 20 queue.push(cur.right); 21 } 22 } 23 return false; 24 };
标签:tree ram tco code 二叉树 efi ber color and
原文地址:https://www.cnblogs.com/aaronliu1991/p/12182508.html