leetcode 543.二叉树的直径

题目描述

给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
leetcode 543.二叉树的直径_第1张图片

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/diameter-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题

该算法使用了深度优先搜索的思想,在遍历二叉树的每个节点时,计算以当前节点为根的子树的深度,并更新直径的最大值。在返回上层递归之前,将以当前节点为根的子树的深度返回给上层递归,用于计算祖先节点的直径。

该算法的时间复杂度为 O(n),其中 n 是二叉树的节点数目。

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

class Solution {
    int maxDiameter = 0;
    
    public int diameterOfBinaryTree(TreeNode root) {
        if (root == null) {
            return 0;
        }
        
        getMaxDepth(root);
        
        return maxDiameter;
    }
    
    private int getMaxDepth(TreeNode node) {
        if (node == null) {
            return 0;
        }
        
        int leftDepth = getMaxDepth(node.left);
        int rightDepth = getMaxDepth(node.right);
        
        maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth);
        
        return Math.max(leftDepth, rightDepth) + 1;
    }
}

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