赞
踩
1、掌握二叉树的二叉链表存储结构;
2、掌握利用二叉树的先序遍历方法创建一个二叉树;
3、掌握二叉树遍历的递归实现方法,掌握利用队列“先进先出”的结构特点实现层序遍历。
按扩展先序遍历序列输入二叉树中结点的值,(用‘#’表示空),构造一棵二叉树;
以递归算法实现二叉树的先序、中序、后序遍历;
实现二叉树的层次遍历(采用队列实现)。
1、按扩展先序遍历序列输入二叉树中结点的值,(构造一棵二叉树;
2、以递归算法实现二叉树的先序、中序、后序遍历;
3、用队列实现实现二叉树的层次遍历
#include<stdio.h> #include<stdlib.h> typedef char TElemType; typedef struct BiTnode { TElemType data; /*保存树结点的数据元素,比如字符A、B、C等*/ struct BiTnode *lchild, *rchild; //左右子树的指针 } BiTnode,*BinTree; #define QueueSize 50 //定义队列的最大容量 typedef struct { BiTnode *data[QueueSize]; /*保存队中元素*/ int front,rear; /*队头和队尾指针,队头指向队列首元素的前一个位置,队尾指向队尾元素。*/ } SqQueue; void CreateBinTree(BinTree *tree){//根据所有序列创建二叉树 char C; scanf("%c",&C); if(C== '#'){ (*tree) = NULL; } else{ *tree=(BinTree)malloc(sizeof(BiTnode)); (*tree)->data=C; CreateBinTree(&((*tree)->lchild)); CreateBinTree(&((*tree)->rchild)); } } void Preorder(BinTree T){//先序遍历 if(T){ printf("%c ",T->data); Preorder(T->lchild); Preorder(T->rchild); } } void Inorder(BinTree T){//中序遍历 if(T){ Inorder(T->lchild); printf("%c ",T->data); Inorder(T->rchild); } } void Postorder(BinTree T){//后序遍历 if(T){ Postorder(T->lchild); Postorder(T->rchild); printf("%c ",T->data); } } /*初始化队列*/ void InitQueue(SqQueue *&q) { q=(SqQueue*)malloc(sizeof(SqQueue)); q->front=q->rear=0; } /*销毁队列*/ void DestroyQueue(SqQueue *q) { free(q); } /*判断队列是否为空*/ bool QueueEmpty(SqQueue *q) { return (q->front==q->rear); } //入队列 bool enQueue(SqQueue*& q, BiTnode*& BT) { if (q->rear ==QueueSize- 1) { //判断队列是否满了 return false; //返回假 } q->rear++; //头指针加 1 q->data[q->rear] = BT; //传值 return true; //返回真 } //出队列 bool deQueue(SqQueue*& q, BiTnode*& BT) { if (q->front==q->rear) { //判断是否空了 return false; //返回假 } q->front++; //尾指针加 1 BT = q->data[q->front]; //取值 return true; //返回真 } void LevelOrder(BinTree b) { BinTree p; SqQueue *qu; InitQueue(qu); enQueue(qu,b); while (!QueueEmpty(qu)){ deQueue(qu,p); printf("%c ",p->data); if(p-> lchild!= NULL) enQueue(qu,p -> lchild); if (p-> rchild!= NULL) enQueue(qu,p -> rchild) ; } DestroyQueue(qu); } int main(){ BinTree T = NULL; printf("请输入您要建立的二叉树的先序扩展序列(用#表示空)\n"); CreateBinTree(&T); printf("构造二叉树成功!\n"); printf("先序遍历:\n"); Preorder(T); printf("\n"); printf("中序遍历:\n"); Inorder(T); printf("\n"); printf("后序遍历:\n"); Postorder(T); printf("\n"); printf("层次遍历:\n"); LevelOrder(T); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。