算法通过村——如何使用中序和后续来恢复一棵二叉树

如何根据后序和中序遍历恢复二叉树

恢复一棵二叉树,即从其遍历结果中还原出其结构,是计算机科学中一个常见且有趣的问题。其中,后序遍历和中序遍历是两种常用的树遍历方式,我们可以利用这两种遍历结果来还原原始的二叉树。在这篇博文中,我们将探讨如何根据后序和中序遍历恢复二叉树。

了解后序和中序遍历

在开始之前,我们先来回顾一下后序和中序遍历是什么。

后序遍历:从左子树到右子树,最后访问根节点。
中序遍历:从左子树开始,然后访问根节点,最后访问右子树。

算法思路

恢复二叉树的关键在于确定根节点和子树的范围。我们可以通过后序遍历的最后一个节点确定根节点,然后通过中序遍历将左右子树分开。接着,我们可以递归地在左右子树中进行相同的操作,直到恢复整个二叉树。

Leetcode链接: 106. 从中序与后序遍历序列构造二叉树

class Solution {
    public int postindex;
    public TreeNode buildTreeChild(int[] inorder,int[] postorder,int inbegin,int inend){//
        if(inbegin>inend){
            return null;
        }
        TreeNode root=new TreeNode(postorder[postindex]);
        
        int rootindex=find(inorder,postorder[postindex],inbegin,inend);//中序 根的值 前 后

        postindex--;
        root.right=buildTreeChild(inorder,postorder,rootindex+1,inend);//先构建右树在构建左树
        root.left=buildTreeChild(inorder,postorder,inbegin,rootindex-1);

        return root;
    }
    //在中序遍历中找根的位置
    public int find(int[] inorder,int val,int inbegin,int inend){
        for(int i=inbegin;i<=inend;i++){
            if(inorder[i]==val){
                return i;
            }
        }
        return -1;
    }

    public TreeNode buildTree(int[] inorder, int[] postorder) {
            postindex=inorder.length-1;
            return buildTreeChild(inorder,postorder,0,inorder.length-1);//中序 后序 根节点 头 尾 
    }
}

总结
根据后序和中序遍历恢复二叉树是一个经典的问题,通过确定根节点和子树的范围,我们可以使用递归的方法有效地还原出整个二叉树的结构。这个问题的解决思路可以帮助我们更好地理解树的结构和遍历方式。

希望这篇博文能够帮助你理解如何根据后序和中序遍历恢复二叉树。如果你有任何问题或疑惑,欢迎在评论区留言,我将尽力解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值