Java面试总结_二叉树结点最大距离

package com.binarytree.realize;
//最大距离=左子树到根节点最大距离+右子树到根节点最大距离
//结点距离指两个结点之间边的个数
class NodeNew{
	public int data;
	public NodeNew left=null;
	public NodeNew right=null;
	public int leftMaxDistance;
	public int rightMaxDistance;
	public NodeNew(int data){
		this.data = data;
	}
}

public class FindMaxDistance {
	private static int maxLen = 0;
	public static int findMaxDistance(NodeNew head) {
		//边界情况
		if(head == null) 
			return 0;
		if(head.left == null) {
			head.leftMaxDistance = 0;
		}
		if(head.right == null) {
			head.rightMaxDistance = 0;
		}	
		//如果左右子树不为空则分别递归查找
		if(head.left != null) {
			findMaxDistance(head.left);
		}
		if(head.right != null) {
			findMaxDistance(head.right);
		}	
		//计算左子树到根节点最大距离
		if(head.left != null) {
			head.leftMaxDistance = Math.max(head.left.leftMaxDistance,head.left.rightMaxDistance )+1;
		}
		if(head.right != null) {
			head.rightMaxDistance = Math.max(head.right.leftMaxDistance,head.right.rightMaxDistance )+1;
		}		//计算右子树到根节点最大距离
		//最大距离
		if(head.leftMaxDistance + head.rightMaxDistance > maxLen ) {
			maxLen = head.leftMaxDistance + head.rightMaxDistance;
		}
		return maxLen;
	}
	public static void main(String[] args) {
		NodeNew head = new NodeNew(1);
		NodeNew head1 = new NodeNew(2);
		NodeNew head2 = new NodeNew(3);
		NodeNew head3 = new NodeNew(4);
		NodeNew head4 = new NodeNew(5);
		NodeNew head5 = new NodeNew(6);
		NodeNew head6 = new NodeNew(7);
		NodeNew head7 = new NodeNew(8);
		NodeNew head8 = new NodeNew(9);
		head.left = head1;
		head.right = head2;
		head1.left = head3;
		head1.right = head4;
		head2.left = head5;
		head2.right = head6;
		head3.left = head7;
		head3.right = head8;
		System.out.println(findMaxDistance(head));
		
	}

}

 

你可能感兴趣的:(Java程序员面试笔记)