二叉树基本操作(C语言实现)

/*
*@author:orsrrc
*CSDN:https://blog.csdn.net/qq_52321992?type=blog
* 博客园:https://www.cnblogs.com/orsrrc/
*/

注:本篇中涉及C++中的传递引用等方法,所以在创建源文件时文件后缀为.cpp,.cpp文件是向下兼容的,所以当我们使用C语言语句也可以编译成功。

由于使用VS编译时采用新的规则,原本的Scanf函数等不适用本规则会提示使用scanf_f函数或者_CRT_SECURE_NO_WARNINGS。这里我们使用_CRT_SECURE_NO_WARNINGS,方便阅读。如果你用的编译器不是VS的可以不在首行添加这一句

//先序遍历的顺序建立二叉链表
BiTree CreateBiLinkTree(BiTree &T) {
    getchar();
    char enter_number;
    printf("请输入当前节点的值:");
    scanf("%c", &enter_number);
    if (enter_number == '#')//当输入的值为'#'时代表当前节点的值为空
    {
        T = NULL;
    }
    else {
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = enter_number;
        CreateBiLinkTree(T->Lchild);
        printf("当前结点的值为空,输入另一个结点\n");
        CreateBiLinkTree(T->Rchild);
    }
    return T;
}

//递归先序遍历该二叉链表树
void PreRTraverse (BiTree &T) { /
    if (T != NULL)
    {
        printf("%c", T->data);
        PreRTraverse(T->Lchild);
        PreRTraverse(T->Rchild);
    }
}

//递归中序遍历该二叉链表树

void MidRTraverse (BiTree &T) {
    if (T != NULL)
    {
        MidRTraverse(T->Lchild);
        printf("%c", T->data);
        MidRTraverse(T->Rchild);
    }
}

//递归后序遍历该二叉链表树
void PostRTraverse (BiTree &T) {
    if (T != NULL)
    {
        PostRTraverse(T->Lchild);
        PostRTraverse(T->Rchild);
        printf("%c", T->data);
    }
}

完整代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//头文件包含部分


typedef struct BiLinkNode {
    //二叉链表树节点的类型定义
    char data;
    struct BiLinkNode* Lchild;//链表指针域的左子树
    struct BiLinkNode* Rchild;//链表指针域的右子树
} BiTNode, *BiTree;;

//先序遍历的顺序建立二叉链表
BiTree CreateBiLinkTree(BiTree &T) {
    getchar();
    char enter_number;
    printf("请输入当前节点的值:");
    scanf("%c", &enter_number);
    if (enter_number == '#')
    {
        T = NULL;
    }
    else {
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = enter_number;
        CreateBiLinkTree(T->Lchild);
        printf("当前结点的值为空,输入另一个结点\n");
        CreateBiLinkTree(T->Rchild);
    }
    return T;
}
 //递归先序遍历该二叉链表树
void PreRTraverse (BiTree &T) {
    if (T != NULL)
    {
        printf("%c", T->data);
        PreRTraverse(T->Lchild);
        PreRTraverse(T->Rchild);
    }
}

//递归中序遍历该二叉链表树
void MidRTraverse (BiTree &T) {
    if (T != NULL)
    {
        MidRTraverse(T->Lchild);
        printf("%c", T->data);
        MidRTraverse(T->Rchild);
    }
}

//递归后序遍历该二叉链表树
void PostRTraverse (BiTree &T) {
    if (T != NULL)
    {
        PostRTraverse(T->Lchild);
        PostRTraverse(T->Rchild);
        printf("%c", T->data);
    }
}

//函数菜单
int main() {
    bool isFlag = true;
    BiTree T = NULL;
    while (isFlag == true) {
        printf("——————————二叉樹——————————————\n");
        printf("\t\t1.創建二叉樹\n");
        printf("\t\t2.先序遍历二叉链表树\n");
        printf("\t\t3.中序遍历二叉链表树\n");
        printf("\t\t4.后序遍历二叉链表树\n");
        printf("\t\t5.退出\n");
        printf("请选择功能功能:");
        int choose;
        scanf("%d", &choose);
        switch (choose) {
        case 1:
                system("cls");
                T = CreateBiLinkTree(T);
                getchar();
            break;

        case 2:
            printf("先序遍历二叉链表树的结果为:");
            PreRTraverse(T);
            printf("\n");
            system("pause");
            system("cls");
            break;

        case 3:
            printf("中序遍历二叉链表树的结果为:");
            MidRTraverse(T);
            printf("\n");
            system("pause");
            system("cls");
            break;

        case 4:
            printf("后序遍历二叉链表树的结果为:");
            PostRTraverse(T);
            printf("\n");
            system("pause");
            system("cls");
            break;
        
        case 5:
            int choice;
            printf("您是否要退出?(1/0)\n");
            scanf("%d", &choice);
            if (choice == 1)
            {
                isFlag = false;
            }
            break;
        }
    }
}

 


测试用代码ABC##DE#G##F###

欢迎留言与我交流!!!

posted @   华岁渡春风  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示