中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
本文包含两个文件的代码和一张测试效果图:
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"); }
微信扫码分享