543. 二叉树的直径
思路:直径一定是「叶子 <---> 叶子」,所以我们可以递归求经过每个结点(分隔左右子树)的直径,注意前置条件是先获取左右子树的高度。
时间:O(n),空间:O(n)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private int maxDiameter = 0; public int dp(TreeNode root) { if(root == null) return 0; int leftH = dp(root.left); int rightH = dp(root.right); // 容易出错的地方!!! if(root.left != null) leftH += 1; if(root.right != null) rightH += 1; maxDiameter = Math.max(maxDiameter, leftH+rightH); return Math.max(leftH, rightH); } public int diameterOfBinaryTree(TreeNode root) { dp(root); return maxDiameter; } }