iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
自我挑戰組

從leetcode學習資料結構和演算法系列 第 26

Day 26 Maximum Depth of Binary Tree

  • 分享至 

  • xImage
  •  

題目說明:給一棵樹,要你求出它的最大深度。最大深度的定義是從根節點一路往葉節點走的最長路徑(節點總數)

Case 1:

Input: root = [3,9,20,null,null,15,7]
Output: 3

Case 2:
Input: root = [1,null,2]
Output: 2

解題思路:要計算最大深度,我們要考慮四個情況

  1. 根節點為空值null
  2. 根節點只有左子樹(右子樹為空值null),持續追蹤左子樹的深度
  3. 根節點只有右子樹(左子樹為空值null),持續追蹤右子樹的深度
  4. 根節點都有左右子樹的話,就取左子樹和右子樹當中的最大值

以上的概念如果有的話程式就很好寫了

附上程式碼以及註解
Java

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null){return 0;}//節點為空值,最大深度=0
        else if(root.left==null && root.right!=null){
            return 1+maxDepth(root.right);
            //根節點只有右子樹(左子樹為空值null),並持續追蹤右子樹的深度
        }
        else if(root.left!=null && root.right==null){
            return 1+maxDepth(root.left);
            //根節點只有左子樹(右子樹為空值null),並持續追蹤左子樹的深度
        }
        else return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
        //回傳左子樹和右子樹兩者深度的較大值
    }
}

Python

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if root==None:
            return 0    #節點為空值,最大深度=0
        elif root.left!=None and root.right==None:
            return 1+self.maxDepth(root.left)
            #根節點只有左子樹(右子樹為空值null),並持續追蹤左子樹的深度
        elif root.left==None and root.right!=None:
            return 1+self.maxDepth(root.right)
            #根節點只有右子樹(左子樹為空值null),並持續追蹤右子樹的深度
        return max(self.maxDepth(root.left),self.maxDepth(root.right))+1
        #回傳左子樹和右子樹兩者深度的較大值

這邊要注意的地方是深度要記得+1因為有包含根節點


上一篇
Day 25 N-ary Tree Postorder Traversal
下一篇
Day 27 Path Sum
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言