6-3 二叉树创建及遍历

实现二叉树创建及遍历算法。

函数接口定义:

void CreateBiTree(BiTree &T);//根据输入的字符串,创建二叉树。 
void PreOrder(BiTree T);//先序遍历二叉树 
void InOrder(BiTree T);//中序遍历二叉树 
void PostOrder(BiTree T);//后序遍历二叉树 
void LevelOrder(BiTree T);//层次遍历二叉树

其中 T 表二叉树类型。

裁判测试程序样例:

#include<iostream>
using namespace std;
typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreateBiTree(BiTree &T);//根据输入的字符串,创建二叉树。 
void PreOrder(BiTree T);//先序遍历二叉树 
void InOrder(BiTree T);//中序遍历二叉树 
void PostOrder(BiTree T);//后序遍历二叉树 
void LevelOrder(BiTree T);//层次遍历二叉树  

int main(){
 BiTree T;
 CreateBiTree(T);
 cout<<"PreOrder:"; 
 PreOrder(T);
 cout<<endl<<"InOrder:";
 InOrder(T);
 cout<<endl<<"PostOrder:";
 PostOrder(T);
 cout<<endl<<"LevelOrder:";
 LevelOrder(T);
 return 0;
} 
/* 请在这里填写答案 */

输入样例:

AB#C##D#EF###

输出样例:

输出拓扑序列。

PreOrder:ABCDEF
InOrder:BCADFE
PostOrder:CBFEDA
LevelOrder:ABDCEF 

AC代码:

#include <queue>//引用队列的头文件

void CreateBiTree(BiTree &T)//根据输入的字符串,创建二叉树。 
{
   char e;
   scanf("%c",&e);
   if(e=='#')T=NULL;
   else{
     T=(BiTree)malloc(sizeof(BiTNode));
     if(!T)exit(-2);
     T->data=e;
     CreateBiTree(T->lchild);
     CreateBiTree(T->rchild);
   }
   return ;  
}
void PreOrder(BiTree T)//先序遍历二叉树 
{
    if(T==NULL) return;
    printf("%c",T->data);
    PreOrder(T->lchild);
    PreOrder(T->rchild);
}
void InOrder(BiTree T)//中序遍历二叉树 
{
    if(T==NULL) return;
    InOrder(T->lchild);
    printf("%c",T->data);
    InOrder(T->rchild);
}
void PostOrder(BiTree T)//后序遍历二叉树 
{
    if(T==NULL) return;
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%c",T->data);
}
void LevelOrder(BiTree T)//层次遍历二叉树
{
    std::queue<struct BiNode*> que;//用C++中的queue创建一个队列
    while (T) {
        std::cout <<T->data;
        if (T->lchild) {
            que.push(T->lchild);
        }
        if (T->rchild) {
            que.push(T->rchild);
        }
        if (que.empty()) {
            return;
        }
        T = que.front();
        que.pop();
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值