【Java二叉树练习】给前序中序(中序后序)遍历来还原树

本文介绍了如何通过先序和中序遍历序列来还原二叉树。首先,根节点是先序遍历的第一个节点,然后根据中序遍历找到根节点并划分左右子树。通过递归的方式不断分解问题,最终建立完整的二叉树结构。代码实现中利用了链表的.subList()方法进行序列截取。
摘要由CSDN通过智能技术生成

对于一颗二叉树的遍历序列而言,先序遍历和后序遍历可以很容易找到根节点,而中序遍历方便将左右子树分离开来,
所以我们就可以很轻易的使用两个序列将一颗二叉树还原起来
如下图这棵树:
在这里插入图片描述
先序序列:A B D E H C F G
中序序列:D B E H A F C G
后序序列: D H E B F G C A
以先序中序为例:
先序的第一个节点A,就是整个树的根节点。而从中序中找到根节点,在左边的就是左子树右边的就是右子树
在这里插入图片描述
接着重复上述步骤,继续找到先序的下一个节点B,从中序找到B节点继续分两份
在这里插入图片描述
这样不断重复循环,直到将所有序列遍历完全,整棵树就建立好了。
很容易看出,这是一个递归的想法,将问题不断拆分
现在,我们将思路代码化:

class Node{
   
    char val;
    Node left;
    Node right;
}
    public static Node buildTree1(List<Character> preorder,List<Character> inorder){
   
        char rootValue = preorder.get(0);   //获取先序的第一个节点即整颗树的根节点
        int leftCount = inorder.indexOf
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值