二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树

来源:互联网 发布:阿里云 连接 腾讯云 编辑:程序博客网 时间:2024/05/23 00:39
package binRela;import java.util.Arrays;/** * @Author GJL * @Desription * @Date 2017/11/23 * @Modified By: **/public class FindAcurateTree {    public static BinaryNode rebuildBinaryTree(int[] preOrder,int[] inOrder){        //出口(终止条件)        if(preOrder==null||preOrder.length==0||inOrder==null||inOrder.length==0){            return null;        }        //根据先跟遍历找到跟节点 初始化树        BinaryTree tree = new BinaryTree(preOrder[0]);        //在中序遍历找到跟节点的位置i        int i = 0;        for (; i < inOrder.length; i++) {            if(preOrder[0]==inOrder[i]){                break;            }        }        //根据i重新定义左子树lPreOrder lInorder 右子树rPreOrder rInorder        int[] lPreOrder = Arrays.copyOfRange(preOrder,1,i+1);        int[] lInOrder = Arrays.copyOfRange(inOrder,0,i);        int[] rPreOrder = Arrays.copyOfRange(preOrder,i+1,preOrder.length);        int[] rInOrder = Arrays.copyOfRange(inOrder,i+1,inOrder.length);        tree.root.lNode = rebuildBinaryTree(lPreOrder,lInOrder);        tree.root.rNode = rebuildBinaryTree(rPreOrder,rInOrder);        return tree.root;    }    public static void main(String[] args) {   /*     BinaryTree tree = new BinaryTree(4);        tree.addNode(5);        tree.addNode(1);        tree.addNode(3);*/    int[] preOrder ={4,1,3,5};    int[] inOrder = {1,3,4,5};    BinaryNode binaryNode = rebuildBinaryTree(preOrder,inOrder);    BinaryTree.showAllNodes(binaryNode);    }/*    public static void main(String[] args) {    }*/}class BinaryTree{    BinaryNode root;    public BinaryTree(int data) {        this.root = new BinaryNode(data);    }    public void addNode(int data){        //构造新加节点        BinaryNode node = new BinaryNode(data);        //若未初始化 则新加节点为根节点        if(root == null){ root = node;return;}        //获取树 的跟节点        BinaryNode p = root;        while(true){            if(p.data>data){                if(p.lNode == null){                    p.lNode = node;                    return;                }else{                    p = p.lNode;                }            }else{                if(p.rNode == null){                    p.rNode = node;                    return;                }else{                    p = p.rNode;                }            }        }    }    public static void showAllNodes(BinaryNode root){        if(root==null){            return;        }        //递归调用 完成遍历        System.out.println(root.data);        showAllNodes(root.lNode);        showAllNodes(root.rNode);    }}class BinaryNode{    int data;    BinaryNode lNode;    BinaryNode rNode;    public BinaryNode(int data) {        this.data = data;    }}
阅读全文
0 0