【课程设计】非递归实现二叉树的三种遍历算法及创建排序二叉树

 

本次课程设计主要含三部分内容,并且每一部分内容独立为一个小的课程设计

1.二叉树的建立及其非递归的先序、中序、后序遍历;
2.二叉树的层序遍历
3.排序二叉树的创建及中序遍历输出

  • 首先我们来实现第一小部分的内容,先序递归构建二叉树并按非递归的方法对其进行先序、中序和后序遍历。

接下来我们用下面这颗二叉树作为我们示例进行演示,我们示例二叉树长这样:

【课程设计】非递归实现二叉树的三种遍历算法及创建排序二叉树_第1张图片 图1 示例二叉树

 

在前序遍历生成二叉树中,我们用‘#’表示结点为NULL,因此前序遍历生成二叉树时的输入序列应该为:"abd#h##k##cef##g##m##"。通过CreateTree()函数我们就建立起了一颗如上图所示的二叉树,然后就可以愉快的开始各种遍历测试了,具体代码如下:

#include
#include

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)
            stack[++top] =

你可能感兴趣的:(算法,算法,数据结构)