今日算法之_152_二叉树的直径
前言
Github:https://github.com/HealerJean
1、二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :给定二叉树
1
/ \
2 3
/ \
4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
1.1、解题思路
1.2、算法
int res = 0;
public int diameterOfBinaryTree(TreeNode root) {
dfs(root);
return res;
}
// 函数dfs的作用是:找到以root为根节点的二叉树的最大深度
public int dfs(TreeNode root){
if(root == null){
return 0;
}
int left = dfs(root.left);
int right = dfs(root.right);
//获取该节点的最大深度也就是,也就是最大的值,因为肯定是从一个顶点出发的
res = Math.max(res,left + right);
//返回深度
return Math.max(left,right) + 1;
}
1.3、测试
@Test
public void test(){
System.out.println(diameterOfBinaryTree(initTreeNode()));
}
public TreeNode initTreeNode(){
TreeNode treeNode1 = new TreeNode(3, null ,null);
TreeNode treeNode2 = new TreeNode(6, null , null);
TreeNode treeNode3 = new TreeNode(4, treeNode1, treeNode2);
TreeNode treeNode4 = new TreeNode(1, null, null);
TreeNode root = new TreeNode(5, treeNode3, treeNode4);
return root ;
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
TreeNode(int x, TreeNode left, TreeNode right) {
this.val = x;
this.left = left;
this.right = right;
}
}