二叉树的创建、销毁、各种递归、循环遍历方法(可运行测试)

本文详细介绍了二叉树的创建、销毁以及先序、中序、后序递归和循环遍历的实现方法。通过示例代码展示了如何在C语言中使用递归和循环遍历二叉树,包括层序遍历。同时,文章指出这些方法也可通过队列和栈来实现,但存在一些冲突需要作为C++项目进行编译。
摘要由CSDN通过智能技术生成

因为二叉树的定义就是递归的, 所以二叉树、创建、销毁和各种遍历操作都使用递归的方法,会比较好理解。递归其实主要运用到了系统工作栈, 因此可以使用递归实现的,借助用户栈一般也可以实现, 本文中三种遍历方法都使用递归和循环两种方法实现。也可以使用队列来进行层序遍历。由此可见,队列和栈是两种很基础的工具,应该熟练掌握其使用方法。

本文中的各种函数都可以输入不同二叉树来测试,唯一麻烦的一点的是输入树时需要一个结点一个结点的输入, 为了便于一次测试所有函数,队列和栈都使用到了,但不幸的是,楼主实现的队列和栈的一些函数有冲突,又懒得修改名字,因此只能当成C++来编译。linux 下可以使用G++编译, 下面上代码。

//树的相关头文件

//bintree.h

#include <stdio.h>
#include "Stack.h"
#include "queue.h"

typedef struct Node
{
    char ch;
    struct Node * lchild;
    struct Node * rchild;
}Node;

typedef Node * BtreePointer;

//v : root  , l: leftchild, r: rightchild, c: recycle
BtreePointer create(void);
void show_vlr(BtreePointer pbt);//先序递归
void show_lvr(BtreePointer pbt);//中序递归
void show_lrv(BtreePointer pbt);//后序递归
void show_vlr_c(BtreePointer pbt);//先序循环
void show_lvr_c(BtreePointer pbt);//中序循环
void show_lrv_c(BtreePointer pbt);//后序循环循环
void show_level(BtreePointer pbt);//层序遍历
void destory(BtreePointer pbt);


//实现

//bintree.c

#include "bintree.h"

//这个创建树的函数需要交互输入, 有点麻烦,但是可以建立所有二叉树
//一开始输入根节点, 接着输入左子树、右子树,依次类推,# 表示对应子树为空
BtreePointer create(void)
{
    BtreePointer pnode;
    char temp;
    
    temp = getchar();
    getchar();//skip /n
    if(temp == '#')
        return NULL;
    
    pnode = (BtreePointer)malloc(sizeof(Node));
    if(pnode == NULL)
    {
        return NULL;
    }
    pnode->ch = temp;
    printf("Enter left child data (# to NULL): ");
    pnode->lchild = create();
    printf("Enter right child data(# to NULL): ");
    pnode->rchild = create();
    
    return pnode;
}

void show_vlr(  BtreePointer pbt)//递归
{
    if(pbt == NULL)
        return;
    printf("%c", pbt->ch);
    show_vlr(pbt->lchild);
    show_vlr(pbt->rchild);
}

void show_lvr(  BtreePointer pbt)//递归
{
    if(pbt)
    {
        show_lvr(pbt->lchild);
        printf("%c", pbt->ch);
        show_lvr(pbt->rchild);
    }
}

void show_lrv(BtreePointer pbt)
{
    if(pbt)
    {
        show_lrv(pbt->lchild

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值