题目:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
题解:
package test;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
class Solution {
int maxd = 0;
public int diameterOfBinaryTree(TreeNode root) {
depth(root);
return maxd;
}
public int depth(TreeNode node) {
if (node == null) {
return 0;
}
int Left = depth(node.left);
int Right = depth(node.right);
maxd = Math.max(Left + Right, maxd);//将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
return Math.max(Left, Right) + 1;//返回节点深度
}
}
public class Main {
public static void main(String[] args) {
TreeNode p1 = new TreeNode(8);
p1.left = new TreeNode(8);
p1.left.left = new TreeNode(9);
p1.left.right = new TreeNode(2);
p1.left.right.left = new TreeNode(4);
p1.left.right.right = new TreeNode(7);
p1.right = new TreeNode(7);
Solution solution = new Solution();
int res = solution.diameterOfBinaryTree(p1);
System.out.println("二叉树的直径:" + res);
}
}