[LeetCode] 513. Find Bottom Left Tree Value
Posted aaronliu1991
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 513. Find Bottom Left Tree Value相关的知识,希望对你有一定的参考价值。
寻找最小最左叶子节点的值。题意是给一个二叉树,请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的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode - 513. Find Bottom Left Tree Value
leetcode 513. Find Bottom Left Tree Value
[LeetCode]513 Find Bottom Left Tree Value(BFS)