码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 513. Find Bottom Left Tree Value

时间:2020-01-14 09:45:41      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:put   shift   结果   bottom   while   eve   example   复杂度   sum   

寻找最小最左叶子节点的值。题意是给一个二叉树,请return最底层,最靠左边节点的值。例子

Example 1:

Input:

    2
   /   1   3

Output:
1

Example 2:

Input:

        1
       /       2   3
     /   /     4   5   6
       /
      7

Output:
7

Note: You may assume the tree (i.e., the given root node) is not NULL.

这个题可以用BFSDFS做。两种做法的时间和空间复杂度都是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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!