已知前序遍历和中序遍历重建二叉树

来源:互联网 发布:折800认证淘宝店铺 编辑:程序博客网 时间:2024/06/13 18:12
package exam;/** * Created by Administrator on 2017/3/12. * 重建二叉树 * 递归创建 */public class RebuiltTree {    public static void   main(String[]args){        int []qianxu={1,2,4,7,3,5,6,8};        int [] zhongxu={4,7,2,1,5,3,8,6};        BinaryTreeNode root = constructTrees(qianxu, zhongxu);        printQianxu(root);    }    /**     * 二叉树重建     * @param qianxu     * @param zhongxu     * @return     */    private static BinaryTreeNode constructTrees(int[] qianxu, int[] zhongxu) {        BinaryTreeNode root=new BinaryTreeNode(qianxu[0]); //每次的根节点        int leftNum=0;//左子树数字个数        for(int i=0;i<zhongxu.length;i++){            if(root.data==zhongxu[i]){                 break;            } else {                leftNum++;            }        }        int rightnum=qianxu.length-1-leftNum; //右子数字个数        if(leftNum>0){            int[] leftqianxu=new int[leftNum];            int[] leftzhongxu=new int[leftNum];            for(int i=0;i<leftNum;i++){                leftqianxu[i] = qianxu[i + 1];                leftzhongxu[i] = zhongxu[i];            }              //递归构造左子树            BinaryTreeNode leftRoot = constructTrees(leftqianxu, leftzhongxu);            root.setLeft(leftRoot);        }        if(rightnum>0){            int [] rightqianxu=new int[rightnum];            int [] rightzhongxu=new int[rightnum];            for(int i=0;i<rightnum;i++){                rightqianxu[i]=qianxu[leftNum+i+1];                rightzhongxu[i]=zhongxu[leftNum+1+i];            }            BinaryTreeNode rightroot=constructTrees(rightqianxu,rightzhongxu);            root.setRight(rightroot);        }        return root;    }    private static class BinaryTreeNode{        BinaryTreeNode left;        BinaryTreeNode right;        int data;        BinaryTreeNode(int data){              this(null,null,data);        }        public BinaryTreeNode(BinaryTreeNode left, BinaryTreeNode right, int data) {            this.left=left;            this.right=right;            this.data=data;        }        public BinaryTreeNode getLeft() {            return left;        }        public void setLeft(BinaryTreeNode left) {            this.left = left;        }        public BinaryTreeNode getRight() {            return right;        }        public void setRight(BinaryTreeNode right) {            this.right = right;        }        public int getData() {            return data;        }        public void setData(int data) {            this.data = data;        }    }        public static void printPostOrder(BinaryTreeNode root) {        if (root != null) {            printPostOrder(root.getLeft());            printPostOrder(root.getRight());            System.out.print(root.getData() + "、");        }    }    public static void printZhongxu(BinaryTreeNode root){        if(root!=null){            printZhongxu(root.getLeft());            System.out.print(root.getData()+",");            printZhongxu(root.getRight());        }    }    public static void printQianxu(BinaryTreeNode root){        if (root!=null){            System.out.print(root.data+",");            printQianxu(root.left);            printQianxu(root.right);        }    }}

0 1
原创粉丝点击