【每日一題-leetcode】543.二叉樹的直徑

543.二叉樹的直徑

  1. 二叉樹的直徑

難度簡單397

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。

示例 : 給定二叉樹

          1
         / \
        2   3
       / \     
      4   5    

返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。

1.dfs

最長直徑。可能有三種情況、1.要麼在左子樹中 2.要麼在右子樹中 3.要麼經過根節點、

前兩者直接遞歸 求出最大值即可。但是第三種情況,我們需要存儲一個變量。也就是當前遞歸的最大值。

至於最終返回的是max 而不是Math.max(leftDepth,rightDepth)+1; 是因爲max存儲的值最長直徑,而Math.max(leftDepth,rightDepth)+1;存儲的只是當前節點的左右子樹的最大值+1。

時間複雜度爲O(n)

空間複雜度爲O(1)

		private int max = 0;//存儲最長直徑
    
        public int diameterOfBinaryTree(TreeNode root) {
            dfs(root);
            return max;
        }
    
        public int dfs(TreeNode root){
            if(root == null){
                return 0;
            }
            int leftDepth = dfs(root.left);//遞歸左子樹長度
            int rightDepth = dfs(root.right);//遞歸右子樹長度
            max = Math.max(leftDepth+rightDepth,max);//二者最大值
            
            return Math.max(leftDepth,rightDepth)+1;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章