PTA 7-23 还原二叉树(前序+中序还原二叉树)

本文介绍了如何根据前序遍历和中序遍历序列还原二叉树,阐述了二叉树的性质,并提供了一种递归方法来构建唯一确定的二叉树。内容包括解析遍历序列,找到根节点,以及如何递归构造左右子树。
摘要由CSDN通过智能技术生成

知识点:

  • 根据前序遍历和中序遍历还原二叉树

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

根据二叉树的性质,如果我们只给出二叉树的一种遍历方式的结果,不能完全确定一颗二叉树,这时的二叉树可能具有多种形态。但是当我们给出一颗二叉树的两种不同遍历方式的时候,就可以完全确定一颗二叉树。

这里以前序遍历和中序遍历为例。
假如我们给出两棵二叉树的前中序遍历分别为

前序遍历:ABDFGHIEC
中序遍历:FDHGIBEAC

  • 由前序遍历的性质,我们可以知道 A 一定是这棵树的根结点
  • 根据中序遍历可知, A 左边的一定是 A 的左子树,A 右边的一定是 A 的右子树
  • 同理,B 为 A 的左子树的根结点……
  • 如此递归下去就可以生成一颗确定的二叉树

由此,我们就可以写出递归的还原二叉树的代码:

#include <iostream>
#include <string>
using namespace std;

struct node {
   
    char data;
    node *left, *right;
    node(char _data): data(_data), 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值