根据前序遍历和中序遍历,构造二叉树

来源:互联网 发布:网络教育期末考试开考 编辑:程序博客网 时间:2024/05/07 18:35

思路:前序的第一个字母为树的根节点,然后查看中序序列中这个字母的位置,它之前的为左子树,之后的为右子树,然后分别对这两个子树的前序和中序序列做递归操作。

    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {        int n = pre.length;        TreeNode root = new TreeNode(pre[0]);        int leftLen = 0;        for(leftLen=0;leftLen<n&&pre[0]!=in[leftLen];leftLen++);        int rightLen = n - leftLen - 1;        int left1[] = new int[leftLen];        int right1[] = new int[rightLen];        int left2[] = new int[leftLen];        int right2[] = new int[rightLen];        for(int i=1;i<=leftLen;i++){            left1[i-1] = pre[i];            left2[i-1] = in[i-1];        }        for(int i=0;i<rightLen;i++){            right1[i] = pre[leftLen+i+1];            right2[i] = in[leftLen+i+1];        }        if(leftLen>0){            root.left = reConstructBinaryTree(left1,left2);        }        if(rightLen>0){            root.right = reConstructBinaryTree(right1,right2);        }        return root;    }
0 0