트리에서 두 노드 사이의 거리(경로 길이)의 최대값을 구합니다.
2186 단어 알고리즘의 아름다움
/*
*
* , , " " 。
* , 。 :
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;
}
}
테스트 통과!!!