zoukankan      html  css  js  c++  java
  • Maximum Depth of Binary Tree 解答

    Question

    Given a binary tree, find its maximum depth.

    The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

    Solution 1 -- Recursion

    Recursion way is easy to think. Similar with "Minimum Depth of Binary Tree", time complexity is O(n).

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public int maxDepth(TreeNode root) {
    12         if (root == null)
    13             return 0;
    14         return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
    15     }
    16 }

    Solution 2 -- Iteration

    BFS: We can still use level order traversal to get depth.

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public int maxDepth(TreeNode root) {
    12         if (root == null)
    13             return 0;
    14         List<TreeNode> current = new ArrayList<TreeNode>();
    15         current.add(root);
    16         List<TreeNode> next;
    17         int result = 1;
    18         while (current.size() > 0) {
    19             next = new ArrayList<TreeNode>();
    20             for (TreeNode tmpNode : current) {
    21                 if (tmpNode.left != null)
    22                     next.add(tmpNode.left);
    23                 if (tmpNode.right != null)
    24                     next.add(tmpNode.right);
    25             }
    26             current = next;
    27             result++;
    28         }
    29         return result - 1;
    30     }
    31 }

    DFS: Traverse tree while recording level number.

     1 # Definition for a binary tree node.
     2 # class TreeNode:
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution:
     9     def maxDepth(self, root: TreeNode) -> int:
    10         if not root:
    11             return 0
    12         node_stack = [root]
    13         value_stack = [1]
    14         result = 1
    15         while node_stack:
    16             node = node_stack.pop()
    17             value = value_stack.pop()
    18             result = max(value, result)
    19             if node.left:
    20                 node_stack.append(node.left)
    21                 value_stack.append(value + 1)
    22             if node.right:
    23                 node_stack.append(node.right)
    24                 value_stack.append(value + 1)
    25         return result
  • 相关阅读:
    事件溯源的使用实例
    CQRS With Axon
    maven打包带依赖
    MongoDB Query语法和工具
    docker 在外部指定参数变量 spring
    logger 过滤部分类的logger
    Nginx ServerName指令
    Nginx 处理Http请求简单流程
    Listen 指令
    Nginx 配置
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4834442.html
Copyright © 2011-2022 走看看