【递归分解】543. 二叉树的直径

543. 二叉树的直径

解题思路

  • 改造二叉树的后续遍历算法
  • 使用二叉树问题的第二种思路 递归分解
  • 将后序遍历两个子树的返回值使用变量保存起来 然后累加计算最大值

/**
 * 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 {

    // 递归分解思路
    int maxDiameter = 0;// 记录最大直径的长度
    public int diameterOfBinaryTree(TreeNode root) {
        // 改造二叉树的后续遍历算法  计算最大直径 放在最后
        maxDepth(root);
        return maxDiameter;
    }

    // 计算节点的最大深度
    int maxDepth(TreeNode root){
        if(root == null){
            return 0;
        }

        // 后续遍历  改造后续便林   后续遍历会返回遍历子树的值
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);

        maxDiameter = Math.max(maxDiameter,left + right);


        return 1 + Math.max(left,right);// 返回节点的最大深度
    }
}

你可能感兴趣的:(#,Leetcode,算法)