回复
C语言实现【二叉树】创建与两种遍历
deanyuancn
发布于 2021-2-2 09:27
浏览
0收藏
本文包含两个文件的代码和一张测试效果图:
BinaryTree.h文件: 用于存储信息:存放函数、结构体、栈的函数实现、变量名等
TreeTravel.cpp文件: 用于测试
效果图:(位于最上方)
效果图:
BinaryTree.h文件:
#include<stdio.h>
#include<stdlib.h>
#define MAX_TRUE_SIZE 100
#define OK 1
#define ERROR 0
typedef int Status;
typedef char TElemType; //树结点的数据类型
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
Status CreateBiTree(BiTree *T){
TElemType ch;
scanf("%c", &ch);
if(ch == '#'){
*T = NULL;
}
else{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T){
return ERROR;
}
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}
void PreOrderTraverse(BiTree T){
if(T == NULL){
return;
}
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
void InOrderTraverse(BiTree T){
if(T == NULL){
return;
}
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BiTree T){
if(T == NULL){
return;
}
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}
void PreOrder(BiTree T)
{
if(T == NULL){
return;
}
BiTree Seqstack[MAX_TRUE_SIZE];
int top = -1;
BiTree p;
top++;
Seqstack[top] = T; // 先将根结点压栈
while(top > -1) // 栈不为空时循环
{
p = Seqstack[top]; // 栈顶元素出栈
top--;
printf("%c", p->data); // 访问栈顶元素
if(p->rchild != NULL) // 如果右孩子不为空,则进栈
{
top++;
Seqstack[top] = p->rchild;
}
if(p->lchild != NULL) // 如果左孩子不为空,则进栈
{
top++;
Seqstack[top] = p->lchild;
}
}
}
TreeTravel.cpp文件:
#include "BinaryTree.h"
int main(){
BiTree Tree;
CreateBiTree(&Tree);
printf("前序遍历:");
PreOrderTraverse(Tree);
printf("\n");
printf("中序遍历:");
InOrderTraverse(Tree);
printf("\n");
printf("后序遍历:");
PostOrderTraverse(Tree);
printf("\n");
printf("非递归先序遍历:");
PreOrder(Tree);
printf("\n");
}
已于2021-2-2 09:27:04修改
赞
收藏
回复
相关推荐