问题描述:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径
长度是以它们之间边的数目表示。
上代码,拿去即可运行:
package com.onlyqi.upup01.leetcode;
public class TreeNode {
private TreeNode LefTreeNode;
private TreeNode RightNode;
private Integer value;
public TreeNode() {
}
public TreeNode(TreeNode lefTreeNode, TreeNode rightNode, Integer value) {
LefTreeNode = lefTreeNode;
RightNode = rightNode;
this.value = value;
}
public TreeNode( Integer value) {
this.value = value;
}
public TreeNode getLefTreeNode() {
return LefTreeNode;
}
public void setLefTreeNode(TreeNode lefTreeNode) {
LefTreeNode = lefTreeNode;
}
public TreeNode getRightNode() {
return RightNode;
}
public void setRightNode(TreeNode rightNode) {
RightNode = rightNode;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}
package com.onlyqi.upup01.leetcode;
import java.util.Collections;
public class Test02 {
public static void main(String[] args) {
TreeNode treeNode=new TreeNode(2);
TreeNode treeNode2=new TreeNode(5);
TreeNode treeNode3=new TreeNode(13);
TreeNode treeNode4=new TreeNode(13);
TreeNode treeNode5=new TreeNode(13);
treeNode2.setLefTreeNode(treeNode4);
treeNode2.setRightNode(treeNode5);
treeNode.setLefTreeNode(treeNode2);
treeNode.setRightNode(treeNode3);
int a=maxDepth(treeNode.getRightNode());
int b=maxDepth(treeNode.getLefTreeNode());
System.out.println(a+b);
}
public static int maxDepth(TreeNode root) {
if (root == null) {//空了
return 0;
}else {//遍历孩子
int left=maxDepth(root.getLefTreeNode());
int right=maxDepth(root.getRightNode());
return (left>right)?(left+1):(right+1);
}
}
}
我要刷100道算法题,第80道