重建二叉树

题目一:根据前序遍历和后续遍历重建

思路:

因为前序遍历的第一个节点是根节点,所以先在中序序列中找到根节点,由于是中序序列,所以根节点左边是左子树,根节点右边是右子树,再在左右子树中依次进行上述过程,递归进行就可以重建这棵二叉树。
preStart:前序序列的开始index,以此来确定根节点。
inStart,inEnd:中序序列的起始index,遍历此范围的中序序列,找到根节点在中序序列中的位置。

Paste_Image.png
public TreeNode buildTree(int[] preorder,int[] inorder){
       helper(0,0,inorder.length - 1, preorder, inorder);
}
public TreeNode helper(int preStart,int inStart,int inEnd,int[] preorder,int [] inorder)
{
      if(preStart>inorder.length-1||inStart>inEnd)
             return null;
        TreeNode root=new TreeNode(preorder[preStart]);
        int inIndex;
        for(int i=inStart;i<=inEnd;i++){
               if(root.val==inorder[i])
                      inIndex=i;
         }
        root.left=helper(preStart+1,inStart,inIndex-1,preorder,inorder);
        root.right=helper(preStart+inIndex-inStart+1,inIndex+1,inEnd.preorder,inorder);
        return root;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重...
    levinhax阅读 3,064评论 0 0
  • 重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...
    echoVic阅读 4,160评论 0 2
  • 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数...
    栗栗栗阅读 5,903评论 2 1
  • 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复...
    哦漏昵称已被占用阅读 1,040评论 0 0
  • 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例...
    BeijingIamback阅读 2,682评论 0 0