重建二叉树

本文介绍了一个C++程序,通过先序遍历和中序遍历的输入,利用递归方法重建二叉树结构。函数Rebuild根据给定的先序遍历和中序遍历生成对应的二叉树,而PostOrder则用于后序遍历输出构建的二叉树节点。
摘要由CSDN通过智能技术生成

重建二叉树

step1 已知先序找根
step2 拿根找中序
step3 先序为空 返回
在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
struct TreeNode{
    char data;
    TreeNode* left;
    TreeNode* right;
};
TreeNode* Rebuild(string PreOrder,string InOrder){
    if(PreOrder.size()==0){
        return NULL;
    }else{
        char rootdata=PreOrder[0];
        TreeNode* pNew=new TreeNode;
        pNew->data=rootdata;
        //分解中序序列
        int pos=InOrder.find(rootdata);
        //左子树先序 中序 右子树先序 中序
        pNew->left= Rebuild(PreOrder.substr(1,pos),InOrder.substr(0,pos));
       pNew->right = Rebuild(PreOrder.substr(pos+1),InOrder.substr(pos+1));
        return pNew;
    }
}
void PostOrder(TreeNode* proot){
    if(proot==NULL){
        return;
    }
    PostOrder(proot->left);
    PostOrder(proot->right);
    printf("%c",proot->data);

}
int main(){
    char PreOrder[30];
    char InOrder[30];
    while(scanf("%s%s",PreOrder,InOrder)!=EOF){
        TreeNode* proot;
        proot= Rebuild(PreOrder,InOrder);
        PostOrder(proot);
        printf("\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值