HDU 1710(Binary Tree Traversals)二叉树的遍历

题目给出序列的先序序列和中序序列,要求你后序遍历二叉树

根据先序序列和后序序列,先序递归构造二叉树,然后后序输出

注意两个数组在寻找过程中的起始位置,这个调试花了一点时间

代码:

#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;

typedef struct TreeNode
{
    struct TreeNode *lchild,*rchild;
    int data;
}TreeNode,*BinTree;

int a[1005],b[1005];
int cc,n;

void CreatBinTree(BinTree &T,int s1,int n1,int s2,int n2)
{
    int i;
    T= new TreeNode;
    T->data=a[s1];
    for(i=s2;i<n2;i++)
        if(a[s1]==b[i]) break;
    T->lchild=T->rchild=NULL;
    if(i>s2)  CreatBinTree(T->lchild,s1+1,s1+i-s2+1,s2,i);  //存在左子树
    if(i+1<n2 && (s1+i-s2+1)<n1) CreatBinTree(T->rchild,s1+i-s2+1,n1,i+1,n2);   //存在右子树
}

void PostOrderBinTree(BinTree T)
{
    if(T!=NULL && cc<=n-1)
    {
        PostOrderBinTree(T->lchild);
        PostOrderBinTree(T->rchild);
        if(cc>=n-1)
        {
            cout<<T->data<<endl;
            cc++;
        }
        else
        {
            cout<<T->data<<" ";
            cc++;
        }
    }
}

int main()
{
    int i;
    while(cin>>n)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(i=0;i<n;i++)
            cin>>a[i];
        for(i=0;i<n;i++)
            cin>>b[i];
        BinTree T;
        CreatBinTree(T,0,n,0,n);  //树T,先序位置,总结点数,中序区间
        cc=0;
        PostOrderBinTree(T);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值