当前位置: 首页 > news >正文

c语言二叉树

#include<iostream>
#include<stdlib.h>
using namespace std;

typedef char ElemType;

//二叉树的二叉链表结构,也就是二叉树的存储结构,1个数据域,2个指针域(分别指向左右孩子)

typedef  struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

//二叉树的建立,按前序遍历的方式建立二叉树,当然也可以以中序或后序的方式建立二叉树
void CreateBiTree(BiTree *T)
{
    ElemType ch;
    cin >> ch;
    if (ch == '#')
        *T = NULL;  //保证是叶结点
    else
    {
        *T = (BiTree)malloc(sizeof(BiTNode));
        //if (!*T)
            //exit(OVERFLOW); //内存分配失败则退出。
        (*T)->data = ch;//生成结点
        CreateBiTree(&(*T)->lchild);//构造左子树
        CreateBiTree(&(*T)->rchild);//构造右子树    
    }
}
//表示对遍历到的结点数据进行的处理操作,此处操作是将树结点前序遍历输出
void operation1(ElemType ch)
{
    cout << ch << " ";
}
//此处在输出的基础上,并输出层数
void operation2(ElemType ch, int level)
{
       cout << ch << "在第" << level << "层" << endl;
}


//递归方式前序遍历二叉树
void PreOrderTraverse(BiTree T, int level)
{
    if (T == NULL)
        return;
/*此处表示对遍历的树结点进行的操作,根据你自己的要求进行操作,这里只是输出了结点的数据*/
    //operation1(T->data);
    operation2(T->data, level); //输出了层数

    PreOrderTraverse(T->lchild, level + 1);
    PreOrderTraverse(T->rchild, level + 1);
}

//递归方式中序遍历二叉树

void InOrderTraverse(BiTree T,int level)
{
if(T==NULL)
return;
InOrderTraverse(T->lchild,level+1);

//operation1(T->data);
operation2(T->data, level); //输出了层数

InOrderTraverse(T->rchild,level+1);
}

//递归方式后序遍历二叉树

void PostOrderTraverse(BiTree T,int level)
{
if(T==NULL)
return;
PostOrderTraverse(T->lchild,level+1);
PostOrderTraverse(T->rchild,level+1);

//operation1(T->data);
operation2(T->data, level); //输出了层数
}


int main()
{
    int level = 1; //表示层数
    BiTree T = NULL;
    cout << "请以前序遍历的方式输入扩展二叉树:"; //类似输入AB#D##C##
    CreateBiTree(&T);// 建立二叉树,没有树,怎么遍历

    cout << "递归前序遍历输出为:" << endl;
    PreOrderTraverse(T, level);//进行前序遍历,其中operation1()和operation2()函数表示对遍历的结点数据进行的处理操作
    cout << endl;

    cout << "递归中序遍历输出为:" << endl;
    InOrderTraverse(T, level);
    cout << endl;

    cout << "递归后序遍历输出为:" << endl;
    PostOrderTraverse(T, level);
    cout << endl;

    return 0;
}

相关文章:

  • 丹华资本与区块链
  • hyperledger生成证书命令
  • crypto-config.yaml
  • 纯净版crypto-config.yaml文件
  • hyperledger生成peer和order
  • golang实现web服务器
  • ActiveMQ消息队列
  • export对环境变量进行设置
  • hyperledger中基本网络搭建示例
  • hyperledger中docker-compose文件示例
  • hyperledger多节点交易
  • 微服务架构
  • 微服务架构的特性
  • protoBuf的优缺点
  • GRPC
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [nginx文档翻译系列] 控制nginx
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2019年如何成为全栈工程师?
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • PHP面试之三:MySQL数据库
  • python3 使用 asyncio 代替线程
  • windows下mongoDB的环境配置
  • XForms - 更强大的Form
  • 仿天猫超市收藏抛物线动画工具库
  • 一个项目push到多个远程Git仓库
  • hi-nginx-1.3.4编译安装
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​configparser --- 配置文件解析器​
  • #《AI中文版》V3 第 1 章 概述
  • (1)STL算法之遍历容器
  • (13):Silverlight 2 数据与通信之WebRequest
  • (6)设计一个TimeMap
  • (C语言)fread与fwrite详解
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)pulsar安装在独立的docker中,python测试
  • (二)springcloud实战之config配置中心
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (译)计算距离、方位和更多经纬度之间的点
  • (转) Face-Resources
  • (转)创业的注意事项
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .gitattributes 文件
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net framework4与其client profile版本的区别
  • .NET Micro Framework初体验(二)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net中的Queue和Stack
  • .php文件都打不开,打不开php文件怎么办
  • [ linux ] linux 命令英文全称及解释
  • [Android Pro] AndroidX重构和映射
  • [android]-如何在向服务器发送request时附加已保存的cookie数据