求一棵树中两节点之间距离(路径长度)的最大值

来源:互联网 发布:python列表转字典 编辑:程序博客网 时间:2024/06/05 20:22

题目如下:

/* * 查找一棵树两节点最长距离 * 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。 *写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。测试用的树:                                  n1                             /             \                          n2             n3                       /        \                   n4          n5                 /     \         /   \              n6       n7      n8    n9             /                       /         n10                      n11 * * */


代码如下:

public class LongestPath {public static void main(String[]args){TreeNode n1=new TreeNode(1);TreeNode n2=new TreeNode(2);TreeNode n3=new TreeNode(3);TreeNode n4=new TreeNode(4);TreeNode n5=new TreeNode(5);TreeNode n6=new TreeNode(6);TreeNode n7=new TreeNode(7);TreeNode n8=new TreeNode(8);TreeNode n9=new TreeNode(9);TreeNode n10=new TreeNode(10);TreeNode n11=new TreeNode(11);n1.left=n2;n1.right=n3;n2.left=n4;n2.right=n5;n4.left=n6;n4.right=n7;n5.left=n8;n5.right=n9;n6.left=n10;n9.left=n11;System.out.println(longestPath(n1));//System.out.println(deep(n1));}public static int longestPath(TreeNode root){int leftlong=0;int rightlong=0;if(root==null){return 0;}if(root.left==null&&root.right==null){return 0;}if(root.left==null){return Math.max(longestPath(root.right),deep(root.right)+1);}if(root.right==null){return Math.max(longestPath(root.left),deep(root.left)+1);}leftlong=longestPath(root.left);rightlong=longestPath(root.right);int t=Math.max(leftlong, rightlong);return Math.max(t,deep(root.left)+deep(root.right)+2);}//求树的深度public static int deep(TreeNode root){if(root==null){return 0;}if(root.left==null&&root.right==null){return 0;}if(root.left==null){return deep(root.right)+1;}if(root.right==null){return deep(root.left)+1;}return Math.max(deep(root.left),deep(root.right))+1;}}


TreeNode类如下:

class TreeNode {TreeNode left;TreeNode right;public int val;TreeNode(int val){this.val=val;}}

经测试,验证通过!!!




阅读全文
0 0
原创粉丝点击