求二叉树中节点的最大距离

描述

求二叉树中节点的最大距离

 

分析

二叉树中节点的最大距离=左子树中节点的最大距离+右子树中节点的最大距离

 

代码

class Node{
    public int data;
    public Node left;
    public Node right;
    public int leftMaxDistance; //存储该节点左子树距离根节点的最大距离
    public int rightMaxDistance; //存储该节点右子树距离根节点的最大距离
    public Node(int data){
        this.data=data;
        this.left=null;
        this.right=null;
    }
}

public class BinaryTree {
    private int maxLen=0;
    
    private int max(int a,int b){
        return a>b?a:b;
    }
    
    public void findMaxDistance(Node root){
        if(root==null)
            return;
        if(root.left==null)
            root.leftMaxDistance=0;
        if(root.right==null)
            root.rightMaxDistance=0;
        if(root.left!=null)
            findMaxDistance(root.left);
        if(root.right!=null)
            findMaxDistance(root.right);
        
        //计算左子树中距离根节点的最大距离
        if(root.left!=null)
            root.leftMaxDistance=max(root.leftMaxDistance,root.left.rightMaxDistance)+1;
        //计算右子树中距离根节点的最大距离
        if(root.right!=null)
            root.rightMaxDistance=max(root.rightMaxDistance,root.right.rightMaxDistance)+1;
        
        //获取二叉树所有节点的最大距离
        if(root.leftMaxDistance+root.rightMaxDistance>maxLen){
            maxLen=root.leftMaxDistance+root.rightMaxDistance;
        }
    }
}

 

posted @ 2017-02-02 23:05  hellozay  阅读(648)  评论(0编辑  收藏  举报