树的创建及层序先中后序遍历

#include<stdlib.h>
#include"Queue.h"
typedef BinTree Element;                        //定义队列元素类型
typedef int ElementType;
typedef struct TNode *BinTree;

struct TNode {
ElementType data;
BinTree left;
BinTree right;
};                
BinTree CreatTree();            //层序生成二叉树,输入data值为0则该结点为空
void LevelorderTraveral(BinTree BT);
void PreorderTraversal(BinTree BT);     //先序遍历
void InorderTraversal(BinTree BT);   //中序遍历
void PostorderTraversal(BinTree BT);     //后序遍历

int main()
{
BinTree BT = CreatTree();
LevelorderTraveral(BT);
cout << endl;
InorderTraversal(BT);
cout << endl;
PreorderTraversal(BT);     //先序遍历
cout << endl;
PostorderTraversal(BT);     //后序遍历
cout << endl;
return 0;
}




BinTree CreatTree()
{
ElementType data;
cin >> data;
if (!data) return NULL;
BinTree BT,head;                      //设置局部执行指针BT,以及头结点指针head
ProToQueue Q = CreatQueue(100);            //定义一个容量为一百的队列Q;
head = BT = (BinTree)malloc(sizeof(struct TNode));
BT->data = data;
BT->left = NULL;
BT->right = NULL;
AddQ(Q, BT);
while (!IsEmpty(Q))
{
BT = DeleteQ(Q);
ElementType left, right;
cin >> left >> right;
if (left)
{
BT->left = (BinTree)malloc(sizeof(struct TNode));
BT->left->data = left;
BT->left->left = NULL;
BT->left->right = NULL;
AddQ(Q, BT->left);
}
if (right)
{
BT->right= (BinTree)malloc(sizeof(struct TNode));
BT->right->data = right;
BT->right->left = NULL;
BT->right->right = NULL;
AddQ(Q, BT->right);
}
}
return head;
}


void LevelorderTraveral(BinTree BT)
{
if (!BT) return;
ProToQueue Q = CreatQueue(100);
cout << BT->data << " ";
AddQ(Q, BT);
while (!IsEmpty(Q))
{
BinTree T = DeleteQ(Q);
if (T->left)
{
cout << T->left->data << " ";
AddQ(Q, T->left);
}
if (T->right)
{
cout << T->right->data << " ";
AddQ(Q, T->right);
}
}
}
void InorderTraversal(BinTree BT)     //中序遍历
{
if (!BT) return;
InorderTraversal(BT->left);
cout << BT->data << " ";
InorderTraversal(BT->right);
}


void PreorderTraversal(BinTree BT)     //先序遍历
{
if (!BT) return;
cout << BT->data << " ";
PreorderTraversal(BT->left);
PreorderTraversal(BT->right);
}


void PostorderTraversal(BinTree BT)     //后序遍历
{
if (!BT) return;
PostorderTraversal(BT->left);
PostorderTraversal(BT->right);
cout << BT->data << " ";
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值