二叉树--倒序层序遍历求二叉树树左下角的值

Posted 算法和数据结构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树--倒序层序遍历求二叉树树左下角的值相关的知识,希望对你有一定的参考价值。

来源:LeetCode

难度:中等

描述:

        给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点


示例1:


示例2:

二叉树(十)--倒序层序遍历求二叉树树左下角的值


分析:

        题目其实就是让咱们找到二叉树最下面那一层的第一个节点,正常的方法是采用层序遍历的方式,挨个将二叉树的每一层节点放入队列中,并且在遍历每层的时候取每层第一个节点值替换原结果,直到遍历完即可

         这里介绍一种从右往左的层序遍历方式,即先将根节点的右节点放入队列,再将左节点放入队列,那么最下面那一层的第一个节点一定是队列中最后遍历的节点,因此咱们在遍历的过程中只需要挨个替换即可,无需任何判断


解题

方法一:倒序层序遍历

思路:如分析,利用一个队列,将每层节点从右到左挨个放入队列,依次遍历队列每个节点,最后一个节点就是结果值


代码:

 1public int findBottomLeftValue(TreeNode root) {
2    if (root.left == null && root.right == null) {
3        return root.val;
4    }
5    Queue<TreeNode> queue = new LinkedList<>();
6    queue.offer(root);
7    int ans = root.val;
8
9    while (!queue.isEmpty()) {
10        TreeNode temp = queue.poll();
11        ans = temp.val;
12
13        if (temp.right != null) {
14            // 先把右节点加入 queue
15            queue.offer(temp.right);
16        }
17        if (temp.left != null) {
18            // 再把左节点加入 queue
19            queue.offer(temp.left);
20        }
21    }
22    return ans;
23}

时间复杂度:O(n) 

空间复杂度:O(max_width)  max_width为节点个数最多的那一层节点数


以上仅是个人思路解法,觉得还不错欢迎点赞关注分享


往期精彩推荐



扫描下方二维码,关注公众号,更多精彩等你发现





以上是关于二叉树--倒序层序遍历求二叉树树左下角的值的主要内容,如果未能解决你的问题,请参考以下文章

NC15 求二叉树的层序遍历

#yyds干货盘点# 面试必刷TOP101:求二叉树的层序遍历

算法20:求二叉树最宽的层有多少个节点(层序遍历续)

二叉树的层序遍历二叉树叶节点输出算法求二叉树的高度层序创建一棵二叉树

求二叉树的层序遍历(NC15/考察次数Top6/难度中等)

递归与非递归求二叉树深度