1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【数据结构实验】二叉树的创建与功能实现

【数据结构实验】二叉树的创建与功能实现

时间:2019-02-07 09:00:19

相关推荐

【数据结构实验】二叉树的创建与功能实现

一、二叉树的节点结构体定义

typedef struct BiTNode //定义二叉树的存储结构 { char data;struct BiTNode* lchild, * rchild;}BiTNode, * BiTree;

二、二叉树的先序遍历创建

BiTree CreateTree(BiTree& T) //先序遍历创建二叉树,递归实现{char c;c = getchar();if (c == '#'){T = NULL;}else{T = (BiTNode*)malloc(sizeof(BiTNode)); //为节点T分配内存空间T->data = c;CreateTree(T->lchild);CreateTree(T->rchild);}return T;}

三、二叉树的前序遍历功能实现

void FirstOrderTraverse(BiTree T) //先序遍历二叉树,递归实现{if (T == NULL){return;}printf("%c",T->data);FirstOrderTraverse(T->lchild);FirstOrderTraverse(T->rchild);}

四、二叉树的中序遍历功能实现

void MidOrderTraverse(BiTree T) //中序遍历二叉树,递归实现{if (T == NULL){return;}MidOrderTraverse(T->lchild);printf("%c", T->data);MidOrderTraverse(T->rchild);}

五、二叉树的后序遍历功能实现

void LastOrderTraverse(BiTree T) //后序遍历二叉树,递归实现{if (T == NULL){return;}LastOrderTraverse(T->lchild);LastOrderTraverse(T->rchild);printf("%c", T->data);}

六、返回二叉树的深度函数实现

int max(int a, int b){if (a > b)return a;elsereturn b;}int GetTreeDepth(BiTree T) //得到树的深度{if (T == NULL)return 0;elsereturn 1 + max(GetTreeDepth(T->lchild), GetTreeDepth(T->rchild));}

七、完整代码

#include<stdio.h>#include<stdlib.h>#pragma warning(disable : 4996)typedef struct BiTNode //定义二叉树的存储结构 { char data;struct BiTNode* lchild, * rchild;}BiTNode, * BiTree;BiTree CreateTree(BiTree& T) //先序遍历创建二叉树,递归实现{char c;c = getchar();if (c == '#'){T = NULL;}else{T = (BiTNode*)malloc(sizeof(BiTNode)); //为节点T分配内存空间T->data = c;CreateTree(T->lchild);CreateTree(T->rchild);}return T;}void FirstOrderTraverse(BiTree T) //先序遍历二叉树,递归实现{if (T == NULL){return;}printf("%c",T->data);FirstOrderTraverse(T->lchild);FirstOrderTraverse(T->rchild);}void MidOrderTraverse(BiTree T) //中序遍历二叉树,递归实现{if (T == NULL){return;}MidOrderTraverse(T->lchild);printf("%c", T->data);MidOrderTraverse(T->rchild);}void LastOrderTraverse(BiTree T) //后序遍历二叉树,递归实现{if (T == NULL){return;}LastOrderTraverse(T->lchild);LastOrderTraverse(T->rchild);printf("%c", T->data);}int max(int a, int b){if (a > b)return a;elsereturn b;}int GetTreeDepth(BiTree T) //得到树的深度{if (T == NULL)return 0;elsereturn 1 + max(GetTreeDepth(T->lchild), GetTreeDepth(T->rchild));}int main(){BiTree TA;CreateTree(TA);printf("The FirstOrderTraverse is:\n");FirstOrderTraverse(TA);printf("\n");printf("The MidOrderTraverse is:\n");MidOrderTraverse(TA);printf("\n");printf("The LastOrderTraverse is:\n");LastOrderTraverse(TA);printf("\n");printf("The depth is:\n");printf("%d", GetTreeDepth(TA));return 0;}

八、运行结果

九、总结

二叉树难点在于理解遍历过程中递归的应用,其次是结构体指针的用法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。