1. 程式人生 > 其它 >LeetCode 543——二叉樹的直徑(深度優先搜尋DFS)

LeetCode 543——二叉樹的直徑(深度優先搜尋DFS)

技術標籤:LeetCode刷題

一、題目介紹

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

示例 :
給定二叉樹

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



注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/diameter-of-binary-tree

著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

二、解題思路

本意實際是考察如何計算二叉樹的深度。題目中提到的任意兩點的直徑長度,實際上等價於任意節點的左右子樹的深度之和。因此可以通過深度優先搜尋的辦法,計算每個節點的左右子樹的深度(Left,Right),並記錄其中最大的Left+Right之和。

三、解題程式碼

class Solution {
public:
    int maxVal = 0;
    int diameterOfBinaryTree(TreeNode* root) {
        //本題意在考察求二叉樹的深度問題,採用遞迴的方法
        depth(root);
        return maxVal;
    }

    int depth(TreeNode* node)
    {
        if(node == NULL)
            return 0;
        int Left = depth(node->left); //計算左子樹的深度
        int Right = depth(node->right); //計算右子樹的深度
        maxVal = max(Left + Right, maxVal); //最大直徑實際為左右子樹的深度之和
        return max(Left, Right) + 1; //當前節點的深度為其左右子樹深度的最大值 + 1
    }
};

四、解題結果