您的位置:首页 > 其它

[树]二叉树的建立以及三种遍历

2015-12-19 19:10 477 查看

(上机练习)二叉树的建立以及三种遍历

1. 目的

设计数据结构和算法,实现按层次构造二叉树的算法

掌握树的前根序、中根序和后根序遍历算法

2. 内容

按层次(从上到下,从左到右的顺序)输入树的结点,如果该结点为空,则用一个特定的值替代(比如0或者.)。要求构造一棵如下的二叉树,当二叉树构造成功后,需要对其进行先序遍历,后序遍历,中序遍历。



3. 思路

用链式存储方式,存储二叉树T,并对其用递归方式,用三种方式遍历。

4. 主要函数

void InitBiTree(BiTree &T)


初始化树T,将头节点置空

void CreatBiTree(BiTree &T)


构造二叉树,按先序次序次序输入节点值,^表示空树

void PreOrderTraverse(BiTree &T)


先序遍历二叉树

void InOrderTraverse(BiTree &T)


中序遍历二叉树

void PostOrderTraverse(BiTree &T)


后序遍历二叉树

void Interface()


打印交互界面

5. 代码

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct BiTNode
{
char data;
BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

void InitBiTree(BiTree &T)
{
T = NULL;
}

void CreatBiTree(BiTree &T) //按先序次序次序输入节点值,^表示空树
{
char c;
getchar();
scanf("%c", &c);
if(c == '^')
T = NULL;
else
{
if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(0);
else
T -> data = c;
printf("请输入%c的左孩子:\n", c);
CreatBiTree(T -> lchild);
printf("请输入%c的右孩子:\n", c);
CreatBiTree(T -> rchild);
}
}

void PreOrderTraverse(BiTree &T)
{
if(T == NULL)
return;
else
{
printf("%c", T -> data);
PreOrderTraverse(T -> lchild);
PreOrderTraverse(T -> rchild);
}
}

void InOrderTraverse(BiTree &T)
{
if(T == NULL)
return;
else
{
InOrderTraverse(T -> lchild);
printf("%c", T -> data);
InOrderTraverse(T -> rchild);
}
}

void PostOrderTraverse(BiTree &T)
{
if(T == NULL)
return;
else
{
PostOrderTraverse(T -> lchild);
PostOrderTraverse(T -> rchild);
printf("%c", T -> data);
}
}

void Interface()
{
printf("               二叉树               \n");
printf("====================================\n");
printf("            1.建立二叉树            \n");
printf("            2.先序遍历              \n");
printf("            3.中序遍历              \n");
printf("            4.后序遍历              \n");
printf("            0.退出                  \n");
printf("====================================\n");
}

int main()
{
int n, a = 1;
BiTree T;
InitBiTree(T);
while(a)
{
Interface();
scanf("%d", &n);
switch(n)
{
case 1:
printf("请按先序输入二叉树:\n");
printf("请输入根节点:\n");
CreatBiTree(T);
printf("二叉树建立成功\n");
break;
case 2:
PreOrderTraverse(T);
break;
case 3:
InOrderTraverse(T);
break;
case 4:
PostOrderTraverse(T);
break;
case 0:
return 0;
default:
printf("输入错误\n");
break;
}
system("pause");
system("cls");
}
return 0;
}


5. 运行结果

以先序遍历顺序为bac的二叉树为例











6. 收获总结

malloc函数返回值为void*, 使用时要强制转换

system(“pause”)以及system(“cls”)可以实现暂停显示和清屏功能,归属于头文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: