leetcode---543.二叉树的直径

leetcode---543.二叉树的直径_第1张图片
写这一题之前,最好能先写二叉树的最大深度这一道题,因为虽然在求最大直径这一题中求的不是最大深度,求得是边的长度,但是用到了其中的思想。

本题主要思想就是:由于二叉树没有保存其父节点的信息,所以要求一个叶子结点到另一个叶子结点的直径,就是求一个中心结点的左儿子最大深度加上右儿子的最大深度(在这里左儿子的最大深度正好等于其父节点左边路径的边长)。所以设定一个全局变量,用于保存在遍历过程中最大的直径值,再设定一个函数用于遍历求最大深度。具体代码如下:

c++

class Solution {
private:
    int max_val=0;

    int dfs(TreeNode* node){
        if(node==nullptr){return 0;}
        int left_height;
        int right_height;
        left_height=dfs(node->left);
        right_height=dfs(node->right);
        max_val=max(max_val,left_height+right_height);
        return max(left_height,right_height)+1;
    }
public:
    int diameterOfBinaryTree(TreeNode* root) {
        if(root==nullptr){
            return 0;
        }
        dfs(root);
        return max_val;
    }
};

python

class Solution:
    def diameterOfBinaryTree(self, root: TreeNode) -> int:
        self.max_val=0   # python中只有写成self.才会new出一个内存地址
        if root==None:
            return 0
    
        def dfs(node:TreeNode):
            if node==None:
                return 0
            left_height=dfs(node.left)
            right_height=dfs(node.right)
            self.max_val=max(self.max_val,left_height+right_height)
            return max(left_height,right_height)+1

        dfs(root)
        return self.max_val

你可能感兴趣的:(leetcode,leetcode,深度优先,算法)