问题:结点的距离指这两个结点之间边的个数。求一棵二叉树中相距最远的两个结点之间的距离。
思路:首先,求左子树距离根结点的最大距离,记为leftMaxDistance,其次,求右子树距离根结点的最大距离,记为rightMaxDistance,那么二叉树中结点的最大距离maxDistance满足maxDistance=leftMaxDistance+rightMaxDistance.
package Tree; /** * Created by Administrator on 2017/10/2. */ 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 MaxDistance { 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.left.leftMaxDistance,root.left.rightMaxDistance)+1; } //计算右子树中距离根结点的最大距离 if(root.right!=null){ root.rightMaxDistance=max(root.right.leftMaxDistance,root.right.rightMaxDistance)+1; } //获取二叉树所有结点的最大距离 if(root.leftMaxDistance+root.rightMaxDistance>maxLen){ maxLen=root.leftMaxDistance+root.rightMaxDistance; } } }