题目
leetcode 543. 二叉树的直径
解法一:回溯法(遍历)
class Solution {
private int res;
private int depth;
public int diameterOfBinaryTree(TreeNode root) {
traverse(root);
return res;
}
private void traverse(TreeNode root) {
if (root == null) return;
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
res = Math.max(res, leftDepth + rightDepth);
traverse(root.left);
traverse(root.right);
}
private int maxDepth(TreeNode root) {
if (root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
解法二:分解子问题法
class Solution {
private int res;
private int depth;
public int diameterOfBinaryTree(TreeNode root) {
maxDepth(root);
return res;
}
private int maxDepth(TreeNode root) {
if (root == null) return 0;
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
res = Math.max(res, leftDepth + rightDepth);
return Math.max(leftDepth, rightDepth) + 1;
}
}