编程语言
首页 > 编程语言> > 重建二叉树--剑指offer04(java实现)

重建二叉树--剑指offer04(java实现)

作者:互联网

题目描述

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

解题思路

使用递归操作,将中序先序的结果分解。
在这里插入图片描述
找到当前的中间结点1,然后遍历中序找到对应结点的位置,将前序与中序分成左右子树,传入递归中即可。

源码

public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root=a(pre,in,0,pre.length-1,0,in.length-1);
        return root;
    }
    public static TreeNode a(int[] pre,int[] mid,int pbegin,int pend,int mbegin,int mend)
    {
        if(pbegin > pend || mbegin > mend)
            return null;
        TreeNode t = new TreeNode(pre[pbegin]);
        int i = 0;
        while(mid[i] != pre[pbegin])
        {
            i++;
        }
        t.left = a(pre,mid,pbegin+1,pbegin+i-mbegin,mbegin,i-1);
        t.right = a(pre,mid,i-mbegin+pbegin+1,pend,i+1,mend);
        return t;
    }

标签:pre,遍历,java,pbegin,int,中序,offer04,二叉树,TreeNode
来源: https://blog.csdn.net/weixin_43728163/article/details/100174210