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

来源:互联网 发布:淘宝客服薪资待遇 编辑:程序博客网 时间:2024/06/05 11:02

#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,以及头结点指针headProToQueue 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 << " ";}