二叉树的最大深度

leetcode104题

 

递归解决,在这题里,该方法效率最高

public int maxDepth(TreeNode node) {
    if (node == null) {
        return 0;
    }
    int d1 = maxDepth(node.left);
    int d2 = maxDepth(node.right);
    return Integer.max(d1, d2) + 1;
}

 

使用非递归后序遍历解决

首先定义了一个变量 max 来记录栈的最大高度,初始化为 0。使用一个 while 循环来遍历二叉树节点,循环条件为当前节点不为空或者栈不为空。在循环中,首先判断当前节点是否为空,如果不为空,则将当前节点入栈,并更新栈的大小,然后比较当前栈的大小与 max 的值,更新 max 为更大的那个。如果当前节点为空,则说明到达了某个叶子节点,此时需要判断栈顶节点的右子树是否已经遍历过,如果已经遍历过或者为空,则将栈顶节点出栈;否则,将当前节点移动到栈顶节点的右子树。最终返回 max 值,即栈的最大高度,也即二叉树的最大深度。

public int maxDepth(TreeNode root) {
    TreeNode curr = root;
    TreeNode pop = null;
    LinkedList<TreeNode> stack = new LinkedList<>();
    int max = 0; // 栈的最大高度
    while (curr != null || !stack.isEmpty()) {
        if (curr != null) {
            stack.push(curr);
            int size = stack.size();
            if (size > max) {
                max = size;
            }
            curr = curr.left;
        } else {
            TreeNode peek = stack.peek();
            if (peek.right == null || peek.right == pop) {
                pop = stack.pop();
            } else {
                curr = peek.right;
            }
        }
    }
    return max;
}

 

使用层序遍历, 层数即最大深度

首先判断根节点是否为空,如果为空则直接返回深度为 0。创建一个队列 queue,并将根节点加入队列。使用一个 while 循环遍历队列,直到队列为空为止。在每一层遍历中,获取当前队列的大小,表示当前层的节点个数。遍历当前层的所有节点,依次弹出队列中的节点,如果节点有左子树,则将左子树节点加入队列;如果节点有右子树,则将右子树节点加入队列。每完成一层的遍历,深度加一。最终返回计算得到的深度值。

当前层for循环次数为上一层添加左右子节点后队列的数量,那么刚好循环完该层。

public int maxDepth(TreeNode root) {
    if (root == null) {
        return 0;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    int depth = 0;
    while (!queue.isEmpty()) {
        int size = queue.size();
        for (int i = 0; i < size; i++) {
            TreeNode poll = queue.poll();
            if (poll.left != null) {
                queue.offer(poll.left);
            }
            if (poll.right != null) {
                queue.offer(poll.right);
            }
        }
        depth ++;
    }
    return depth;
}

 

 

参考

104. 二叉树的最大深度 – 力扣(LeetCode)

黑马数据结构

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇