数据结构实验④:二叉树的基本操作

如果你喜欢这篇文章的话,请给作者点赞哟,你的支持是我不断前进的动力。

因为作者能力水平有限,欢迎各位大佬指导。

一、题目描述

用递归的方法实现以下算法。

1.以二叉链表表示二叉树,建立一棵二叉树;

2.输出二叉树的先序、中序和后序遍历结果;

3.计算二叉树的深度;

二、解题思路

1.使用二叉树的二叉链表存储表示,并初始化,让二叉树T的左右孩子均为0。

2.采用先序遍历的方法建立二叉树,如果输入的空格则表示下一节点为空。

3.使用3个算法实现二叉树的先序,中序,后序遍历,其访问的顺序分别为根左右,左根右,左右根。

4.二叉树深度的表示:定义两个变量m和n,分别表示左右叶节点深度,如果左叶子结点深度大于右叶子结点深度,则该二叉树的深度等于m+1(根结点),否则n+1。

三、代码实现

#include
#include
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
//初始化
void createBiTree(BiTree &T)
{
    T = (BiTree)malloc(sizeof(BiTNode));
    T->lchild = NULL;
    T->rchild = NULL;
}
//先序建立二叉树
void InitBiTree(BiTree &T)
{
    char s;
    scanf("%c",&s);
    if(s == ' ')T = NULL;
    else
    {
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = s;
        InitBiTree(T->lchild);
        InitBiTree(T->rchild);
    }
}
//先序遍历
void preorder(BiTree T)
{
    if(T != NULL)
    {
        printf("%c",T->data);
        preorder(T->lchild);
        preorder(T->rchild);
    }
}
//中序遍历
void inorder(BiTree T)
{
    if(T != NULL)
    {
        inorder(T->lchild);
        printf("%c",T->data);
        inorder(T->rchild);
    }
}
//后序遍历
void postorder(BiTree T)
{
    if(T != NULL)
    {
        postorder(T->lchild);
        postorder(T->rchild);
        printf("%c",T->data);
    }
}
//二叉树深度
int height(BiTree T)
{
    int m,n;
    if(T == NULL)
        return 0;
    else
    {
        m = height(T->lchild);
        n = height(T->rchild);
        return m>n?m+1:n+1;
    }
}

int main()
{
    BiTree T;
    createBiTree;
    printf("按先序输入二叉树:");
    InitBiTree(T);
    printf("先序遍历为:");
    preorder(T);
    printf("\n");
    printf("中序遍历为:");
    inorder(T);
    printf("\n");
    printf("后序遍历为:");
    postorder(T);
    printf("\n");
    printf("二叉树深度为:%d\n",height(T));
    return 0;
}

四、运行截图

数据结构实验④:二叉树的基本操作_第1张图片

如果你喜欢这篇文章的话,请给作者点赞哟,你的支持是我不断前进的动力。

因为作者能力水平有限,欢迎各位大佬指导。

你可能感兴趣的:(数据结构学习,数据结构实验,数据结构,c语言)