二叉树节点间的最大距离问题

来源:互联网 发布:session用法 java 编辑:程序博客网 时间:2024/06/05 22:29

//二叉树节点间的最大距离问题public class MaxDistanceOfTree{//二叉树节点的定义public static class Node{public int  value;public Node left;public Node right;public Node(int data){this.value=data;}}//获得一个二叉树两个节点间的最大距离/** 最大子树的长度为:左子树最大长度+右子树最大长度+1*/public static int getMaxDistance(Node head){    int []num=new int[1];  //用来记录每个子树的节点的长度        //System.out.println(num[0]);        return posOrder(head,num);    }//通过二叉树的后序遍历public static int posOrder(Node head,int []num){if(head==null){   num[0]=0;return 0;}//递归调用左子树        int lMax=posOrder(head.left,num);        int maxfromLeft=num[0];        //System.out.println(maxfromLeft);        //递归调用右子树        int rMax=posOrder(head.right,num);        int maxfromRight=num[0];        int curNodeMax=maxfromLeft+maxfromRight+1; //左右子树最大长度相加1        num[0]=Math.max(maxfromLeft,maxfromRight)+1;        return Math.max(Math.max(lMax,rMax),curNodeMax);}public static void  main(String[]args){  /** 构造的二叉树                 1     2              3         4       5      6       7                              8   */                Node head=new Node(1);head.left=new Node(2);head.right=new Node(3);head.left.left=new Node(4);head.left.right=new Node(5);head.right.left=new Node(6);head.right.right=new Node(7);head.right.right.left=new Node(8);        //获得二叉树节点间的最大距离System.out.println(getMaxDistance(head));}}


阅读全文
0 0
原创粉丝点击