HNUST-OJ-1803二叉树遍历1

原题不贴了,直接上代码

void CreateBiTree(BiTree &T)
{
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    TElemType ch;

    //此处和教材的不同是,要处理多组数据,输入ch如果遇到EOF,应该结束程序
    //所以main函数用while(1)
    if(!(cin >> ch)) exit(0);
    /****在此下面完成代码***************/
    if(ch=='#')T=NULL;//依据题意为"#"代表为空树直接让这个节点为NULL
    else//不是空树
    {
        T=new BiTNode;//让T指向一个空间储存数据
        T->data=ch;
        CreateBiTree(T->lchild);//先序遍历要求先根后左右子树,已经扫了根,则往左扫
        CreateBiTree(T->rchild);//扫完左树,接着扫右树
    }
    /***********************************/
}   //CreateBiTree

//用算法5.1 中序遍历的递归算法
void InOrderTraverse(BiTree T)
{
    //中序遍历二叉树T的递归算法
    /****在此下面完成代码***************/
    if(T)
    {
        InOrderTraverse(T->lchild);//中序遍历要求先扫左树再扫根接着扫右树
        cout<<T->data<<" ";
        InOrderTraverse(T->rchild);
    }
    /***********************************/
}

void DestroyBitree(BiTree& T)
{
    /****在此下面完成代码***************/
    if(T)
    {
        if(T->lchild)DestroyBitree(T->lchild);
        if(T->rchild)DestroyBitree(T->rchild);
        free(T);
        T=NULL;



    }
    /***********************************/
}
//跳出本题框架的的二叉树遍历,string版
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int MAX=1e6+10;
string a;
struct tree
{
    char data;
    tree* l,* r;

};
int ji;
void built(tree* &root)
{
    if(ji==a.size())return;
    char x=a[ji++];
    if(x=='#')root=NULL;
    else
    {
        root=new tree;
        root->data=x;
        built(root->l);
        built(root->r);
    }




}
void zhongxv(tree *root)
{
    if(root)
    {
        zhongxv(root->l);
        cout<<root->data<<" ";
        zhongxv(root->r);
    }



}

int main()
{
    while(cin>>a)
    {
        ji=0;
        tree *root;
        built(root);
        zhongxv(root);
        cout<<endl;
    }
}







先去了解下什么是三序分别是什么再来做 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值