LeetCode 104. Maximum Depth of Binary Tree

LeetCode 104

  • 0. 版权声明
  • 1. LeetCode 104
  • 2. 递归
  • 3. 迭代
  • 4. 代码
  • References

0. 版权声明

  • LeetCode 系列笔记来源于 LeetCode 题库1,在个人思考的基础之上博采众长,令鄙人受益匪浅;故今记此文,感怀于心,更多题解及代码,参见 Github2
  • 该系列笔记不以盈利为目的,仅用于个人学习、课后复习及交流讨论;
  • 如有侵权,请与本人联系([email protected]),经核实后即刻删除;
  • 本文采用 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0) 协议发布;

1. LeetCode 104

  • 递归:
    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度:在最坏情况下(即 skewed tree)为 O ( n ) O(n) O(n)
  • 迭代:
    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度:在最坏情况下(即 skewed tree)为 O ( n ) O(n) O(n)
  • n 的含义:表示二叉树中的节点数量;

2. 递归

  • 求解流程:
    • 若某个节点为空,则深度值为0;
    • 对某个节点的左子节点和右子节点分别进行递归调用;
    • 将两个子节点中较大的深度值加1,作为当前节点的深度值;

3. 迭代

  • 求解流程:
    • 创建一个类用于保存一个键值对(以节点为键,以深度为值);
    • 从栈中弹出一个节点;
    • 若当前节点不为 null,则将该节点的深度值与 ans 比较,取两者中的较大值更新 ans;
    • 将当前节点的左右子节点中的非空节点入栈,取当前节点的深度值加1作为键值对的值;
    • 若栈不为空,则重复以上步骤;

4. 代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

// Approach 1: Recursion
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null)
            return 0;
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left, right) + 1;    
    }
}

// Approach 2: Iteration
class Solution {
    public int maxDepth(TreeNode root) {
        int ans = 0;
        Stack<st> stack = new Stack<>();
        stack.push(new st(root, 1));
        while (!stack.empty())
        {
            st temp = stack.pop();
            TreeNode node = temp.getNode();
            int depth = temp.getDepth();
            if (node != null)
            {
                ans = Math.max(ans, depth);
                stack.push(new st(node.left, depth + 1));
                stack.push(new st(node.right, depth + 1));
            }
        }
        return ans;  
    }     
}

public class st {		// 可用 Java 类库中的键值对实现;
    private TreeNode node;
    private int depth;

    public st(TreeNode node, int depth)
    {
        this.node = node;
        this.depth = depth;
    }

    public TreeNode getNode()
    {
        return node;
    }

    public int getDepth()
    {
        return depth;
    }
}

References


  1. https://leetcode-cn.com/u/hqpan/. ↩︎

  2. https://github.com/hqpan/LeetCode. ↩︎

你可能感兴趣的:(LeetCode)