LeetCode地址:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/java
題目描述:node
給定一個二叉樹,找出其最大深度。spa
二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。code
說明: 葉子節點是指沒有子節點的節點。blog
示例:
給定二叉樹 [3,9,20,null,null,15,7]
,遞歸
3 / \ 9 20 / \ 15 7
返回它的最大深度 3 。leetcode
方法一:遞歸get
/** * 方法一:遞歸 * 複雜度分析 * 時間複雜度:咱們每一個結點只訪問一次,所以時間複雜度爲 O(N), 其中 N 是結點的數量。 * 空間複雜度:在最糟糕的狀況下,樹是徹底不平衡的,例如每一個結點只剩下左子結點,遞歸將會被調用 N 次(樹的高度), * 所以保持調用棧的存儲將是 O(N)。但在最好的狀況下(樹是徹底平衡的),樹的高度將是 \log(N)log(N)。所以, * 在這種狀況下的空間複雜度將是 O(\log(N))。 * * @param root * @return */ public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int left_height = maxDepth(root.left); int right_height = maxDepth(root.right); return java.lang.Math.max(left_height, right_height) + 1; } }
方法二:迭代class
/** * 方法二:使用迭代(層序遍歷訪問節點) * @param root * @return */ public int maxDepth_1(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); if (root == null) return 0; queue.offer(root); int levelSize = 1; int height = 0; while (queue.isEmpty() == false) { TreeNode node = queue.poll(); levelSize--; if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); if (levelSize == 0) { height++; levelSize = queue.size(); } } return height; }