本次课程设计主要含三部分内容,并且每一部分内容独立为一个小的课程设计
1.二叉树的建立及其非递归的先序、中序、后序遍历;
2.二叉树的层序遍历
3.排序二叉树的创建及中序遍历输出
- 首先我们来实现第一小部分的内容,先序递归构建二叉树并按非递归的方法对其进行先序、中序和后序遍历。
接下来我们用下面这颗二叉树作为我们示例进行演示,我们示例二叉树长这样:
在前序遍历生成二叉树中,我们用‘#’表示结点为NULL,因此前序遍历生成二叉树时的输入序列应该为:"abd#h##k##cef##g##m##"。通过CreateTree()函数我们就建立起了一颗如上图所示的二叉树,然后就可以愉快的开始各种遍历测试了,具体代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct treeNode{
char data;
struct treeNode*rchild, *lchild;
}TreeNode;
char str[] = "abd#h##k##cef##g##m##";
int pos = 0;
void CreateTree(TreeNode** T)
{//前序递归创建二叉树
char ch;
//scanf("%c", &ch);//读入字符
ch = str[pos++];
if (ch == '#')//.代表空子树
*T = NULL;
else
{
*T = (TreeNode *)malloc(sizeof(TreeNode));
if (!(*T))
{
printf("开辟内存失败\n");
exit(1);
}
(*T)->data = ch;//给T赋值
CreateTree(&(*T)->lchild);//给左子树赋值
CreateTree(&(*T)->rchild);//给右子树赋值
}
}
void preorderTraversal(TreeNode* root)
{
if (!root)
return;
TreeNode* stack[10]; int top = -1;
stack[++top] = root;
while (top > -1)
{
TreeNode* temp = stack[top--];
printf("%c ", temp->data);
if (temp->rchild)