根据后序和中序遍历输出先序遍历 (二叉树遍历)

分析二叉树遍历的性质

根据后序和中序遍历输出先序遍历:
在这里插入图片描述
由上述性质,易做:

题目

在这里插入图片描述

code:
#include<iostream>
using namespace std;
const int N = 110;

void make_a(int *c,int *b,int n){
         if(n == 0) return;  
         int x = c[n-1];
         int i;
         for(i=0;i<n;i++)
               if(b[i] == x) break;
         cout << " " << x;
         make_a(c,b,i);
         make_a(c+i,b+i+1,n-i-1);   // 后缀是从c+i开始,是因为后缀删除的根节点是最后一个节点,并不是第i个节点,所以后缀时仍要用第i个节点,但是不需要用最后一个节点
                                    // 中缀要把第i个结点删除,所以中缀表达式是从i+1个元素开始的;(即后缀每次删最后元素,中缀删掉是中间元素)
}

int main(){
    int b[N],c[N];  // b->中缀    c->后缀
    int n;
    cin >> n;
    for(int i=0;i<n;i++)
        cin >> c[i];
    for(int i=0;i<n;i++)
        cin >> b[i];
    cout << "Preorder:";
    make_a(c,b,n);
    return 0;
}


attention:

分析后缀、中缀有差别(因为元素的位置不同)
后缀是从第i个元素(即元素c+i)开始,是因为后缀删除的根节点是最后一个节点,并不是第i个节点,所以后缀时仍要用第i个节点,但是不需要用最后一个节点
中缀要把第i个结点删除,所以中缀表达式是从i+1个元素(即元素b+i+1)开始的;(即后缀每次删最后元素,中缀删掉是中间元素)

ps

补充:树的计数

已知先序序列和中序序列可确定一棵唯一的二叉树;

已知后序序列和中序序列可确定一棵唯一的二叉树;

已知先序序列和后序序列不能确定一棵唯一的二叉树。

improve: 根据前序和中序遍历输出先序遍历 -> 传送门

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值