트리에서 두 노드 사이의 거리(경로 길이)의 최대값을 구합니다.

제목은 다음과 같습니다.
/*
 *  
 *  , , " " 。
 * , 。 :
                                  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;
	}

}

테스트 통과!!!

좋은 웹페이지 즐겨찾기