面试算法45:二叉树最低层最左边的值

题目

如何在一棵二叉树中找出它最低层最左边节点的值?假设二叉树中最少有一个节点。例如,在如图7.5所示的二叉树中最低层最左边一个节点的值是5。

分析

可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时,每当遇到新的一层时就将变量bottomLeft的值更新为该层第1个节点的值。当整棵二叉树都被遍历完之后,变量bottomLeft的值就是最后一次更新的值,也就是最后一层的第1个节点的值。

由于用广度优先的顺序遍历二叉树时需要区分不同的层,因此可以用两个队列分别存放不同层的节点,一个队列存放当前遍历层的节点,另一个队列存放下一层的节点。

解

java 复制代码
public class Test {
    public static void main(String[] args) {
        TreeNode node8 = new TreeNode(8);
        TreeNode node6 = new TreeNode(6);
        TreeNode node10 = new TreeNode(10);
        TreeNode node5 = new TreeNode(5);
        TreeNode node7 = new TreeNode(7);
        TreeNode node9 = new TreeNode(9);
        TreeNode node11 = new TreeNode(11);

        node8.left = node6;
        node8.right = node10;
        node6.left = node5;
        node6.right = node7;
        node10.right = node9;
        node10.right = node11;

        int result = findBottomLeftValue(node8);
        System.out.println(result);
    }

    public static int findBottomLeftValue(TreeNode root) {
        Queue<TreeNode> queue1 = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue1.offer(root);
        int bottomLeft = root.val;
        while (!queue1.isEmpty()) {
            TreeNode node = queue1.poll();
            if (node.left != null) {
                queue2.offer(node.left);
            }

            if (node.right != null) {
                queue2.offer(node.right);
            }

            if (queue1.isEmpty()) {
                queue1 = queue2;
                queue2 = new LinkedList<>();
                if (!queue1.isEmpty()) {
                    bottomLeft = queue1.peek().val;
                }
            }
        }

        return bottomLeft;
    }
}
相关推荐
mmsx几秒前
Android Dialog 插槽模式:用一套壳统一全应用的弹窗风格
android·java·dialog·开发语言
自强的小白7 分钟前
jvm面试(Gc)
服务器·jvm·面试
u0111026758 分钟前
工具页案例图如何编写 alt让图片说明与处理场景对应
java·前端·javascript·图像处理·人工智能·算法·ai作画
阿狗童鞋12 分钟前
数据结构与算法实战指南
数据结构·算法
码上有光13 分钟前
Linux:进程间通信——匿名管道通信、命名管道通信
android·java·linux·linux通信·匿名通信·命名通信
落魄实习生20 分钟前
Agent Scope Java 2.x 系列【11】AgentState 与状态存储
java·开发语言·ai
Navigator_Z34 分钟前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode
未来之窗软件服务37 分钟前
递归时间复杂度演算T (n)=aT (n/b)+f (n)-东方仙盟
算法·仙盟创梦ide·东方仙盟
Ivanqhz40 分钟前
干涉图着色
java·服务器·网络·数据库·人工智能·深度学习
垆边人似月.1 小时前
华为机考题:明明的随机数
数据结构·算法·华为