重建二叉树(Java)

题目:重建二叉树(Java)

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1,5, 3, 8, 6},则重建出二叉树并输出它的头结点。二叉树结点的定义如下:

/**
 * @author zhaoliang
 * @desc 重建二叉树
 * @date 20200427
 */
public class Main4 {
    //输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
    // 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
    // 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
    private int index =0;
    public TreeNode reConstructBinaryTree(int[] pre, int[] in) {

        index = 0;

        return solve(pre, in);

    }

    private TreeNode solve(int[] pre, int[] tempIn) {
        int len1 = 0;
        int len2 = 0;
        for (int i = 0; i < tempIn.length; i++) {
            if (pre[index] == tempIn[i]){
                break;
            }
            len1 ++;//左子树节点个数++
        }
        len2 = tempIn.length - len1 -1;

        int index1 = 0;
        int index2 = 0;
        int[] temp1 = new int[len1];
        int[] temp2 = new int[len2];

        boolean flag = false;
        for (int i = 0; i < tempIn.length; i++) {
            if (pre[index] == tempIn[i]){
                flag = true;
            }else if (!flag){
                temp1[index1 ++] =tempIn[i];
            }else {
                temp2[index2 ++] =tempIn[i];
            }
        }
        TreeNode node = new TreeNode(pre[index]);       
        node.right =null;
        node.left = null;

        if (index <pre.length && temp1.length > 0){
            index ++;
            node.left = solve(pre,temp1);
        }
        if (index <pre.length && temp2.length > 0){
            index ++;
            node.right =solve(pre,temp2);
        }
        return node;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值