码迷,mamicode.com
首页 > 编程语言 > 详细

根据先序和中序数组构建二叉树

时间:2017-05-12 15:38:14      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:work   int   tar   pen   uil   个数   第一个   中序遍历   ace   

首先根据定义,先序的第一个元素为根节点,由于规定元素没有重复,所以可以根据根节点数值来将中序遍历数组中左右子数分开。

同时根据左右子数的个数继续拆分对应的先序数组,递归左右子树得到结果

/**
 * Created by itworker365 on 5/12/2017.
 */
public class RebuildBTree {
    //有一个前提是元素无重复
    public static void main(String[] args) {
        //根左右
        int[] preTrace = {1,2,4,7,3,5,6,8};
        //左根右
        int[] midTrace = {4,7,2,1,5,3,8,6};
        RebuildBTree rebuildBTree = new RebuildBTree();
        TreeNode treeNode = rebuildBTree.reConstructBinaryTree(preTrace, midTrace);
    }
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if (pre.length == 0 || in.length == 0) {
            return null;
        }
        return reConstructBinaryTree111(pre, 0, pre.length - 1, in, 0, in.length - 1);
    }
    public TreeNode reConstructBinaryTree111(int [] pre,int pstart, int pend, int [] in, int istart, int iend) {
        if (pstart > pend || istart > iend) {
            return null;
        }
        TreeNode root=new TreeNode(pre[pstart]);
        //首先由先序遍历知道第一个元素肯定是根元素,遍历中序找,找到根节点
        //将中序结果分为两个子子数,根据元素个数同时拆分先序数组,分别构建左右子树
        for(int i = istart; i <= iend; i++)
            if(in[i] == pre[pstart]){
                root.left = reConstructBinaryTree111(pre, pstart + 1, pstart + i - istart, in, istart, i - 1);
                root.right = reConstructBinaryTree111(pre, i - istart + pstart + 1, pend, in, i + 1, iend);
            }
        return root;
    }
}
class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) {
        val = x;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }
}

 

根据先序和中序数组构建二叉树

标签:work   int   tar   pen   uil   个数   第一个   中序遍历   ace   

原文地址:http://www.cnblogs.com/it-worker365/p/6845627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!