标签:put shift 结果 bottom while eve example 复杂度 sum
寻找最小最左叶子节点的值。题意是给一个二叉树,请return最底层,最靠左边节点的值。例子
Example 1:
Input: 2 / 1 3 Output: 1Example 2:
Input: 1 / 2 3 / / 4 5 6 / 7 Output: 7Note: You may assume the tree (i.e., the given root node) is not NULL.
这个题可以用BFS和DFS做。两种做法的时间和空间复杂度都是O(n)。
首先BFS比较直观,只要按层序遍历的做法一层层把node塞进queue。当遍历到最底层的时候,输出第一个塞进去的节点值即可。有一个需要注意的细节是,每层节点在塞入queue的时候应该是先右后左,原因是BFS的解法不看当前遍历到了第几层,只能通过这种方式才能保证最底层最靠左的叶子节点是最后被遍历到的。如果按照第一个例子跑一遍,结果就是2 - 3 - 1而不是2 - 1 - 3.
1 /** 2 * @param {TreeNode} root 3 * @return {number} 4 */ 5 var findBottomLeftValue = function(root) { 6 if (root === null) return -1; 7 let res = null; 8 let queue = [root]; 9 while (queue.length) { 10 let cur = queue.shift(); 11 res = cur.val; 12 if (cur.right) queue.push(cur.right); 13 if (cur.left) queue.push(cur.left); 14 } 15 return res; 16 };
用DFS做就直观一些。因为遍历的时候,每次都会判断当前层是不是最底层,若是才更新要输出的节点。
1 /** 2 * @param {TreeNode} root 3 * @return {number} 4 */ 5 var findBottomLeftValue = function(root) { 6 let highestLevel = -1; 7 let leftMost = null; 8 const helper = (node, level) => { 9 if (!node) return; 10 if (level > highestLevel) { 11 highestLevel = level; 12 leftMost = node.val; 13 } 14 helper(node.left, level + 1); 15 helper(node.right, level + 1); 16 }; 17 helper(root, 0); 18 return leftMost; 19 };
[LeetCode] 513. Find Bottom Left Tree Value
标签:put shift 结果 bottom while eve example 复杂度 sum
原文地址:https://www.cnblogs.com/aaronliu1991/p/12190131.html