C++二叉树中序非递归遍历(两种方法)

news2024/11/27 2:20:09

#include <stdio.h>
#include <malloc.h>

//树结构 
typedef struct kl
{
    int data;
    struct kl *lchild;
    struct kl *rchild;
}bittree;


//栈结构 
typedef struct ji
{
    int top;
    bittree **data;
    int size;
}stack;

//初始化栈
void init(stack *stack,int size)
{
    stack->size = size;
    stack->top = -1;
    stack->data = (bittree**)malloc(size * sizeof(bittree*));
    for(int i = 0 ; i < size  ;i++)
    {
        stack->data[i] = NULL;    
    }    
}

//创建树
bittree *createtree()
{
    bittree *root = NULL;
    int num;
    printf("Please input number:");
    scanf("%d",&num);
    if(num > 0)
    {
        root = (bittree*)malloc(sizeof(bittree));
        root->data = num;
        root->lchild = createtree();
        root->rchild = createtree();
    }
}


//栈的操作 判满
int isfull(stack *stack)
{
    return stack->top == stack->size-1;

//栈的操作 判空
int isempty(stack *stack)
{
    return stack->top == -1; 
}

//栈的操作 入栈 
void input(stack *stack,bittree *root)  
{
    if(isfull(stack)) return; 
    stack->top++;
    stack->data[stack->top] = root;
}

//栈的操作 出栈
bittree *out(stack *stack) 
{
    return stack->data[stack->top--];
}

//栈的操作 返回栈顶元素
bittree *top(stack * stack)
{
   int index;
   if(stack->top==-1) return NULL;
    index=stack->top;
    return stack->data[index];

void midvisitbystack1(bittree *root)//已做演示  
{
    if(root == NULL)
        return ;
    
    stack stack;
    init(&stack,50); //一直到这一步差不多都是一样的 
      
    while(root != NULL)
    {
        input(&stack,root);
        root = root->lchild;     //把最左边的一列树的数据全部存入  
    }    
    
    while(!isempty(&stack))
    {
        root = out(&stack);     //一一读出 当读出的这个树有有孩子时 就可以让它等于它的右孩子  
        printf("%5d",root->data);    //然后再把这个右孩子最左边的一列树的数据全部存入 这样循环就解决了   
        if(root->rchild != NULL)
        {
            root = root->rchild;
            while(root != NULL)
            {
                input(&stack,root);
                root = root->lchild;    
            }
        }
    }
}

 

void midvisitbystack2(bittree *root)//已做演示 
{
    stack stack;
    init(&stack,50);
    
    if(root == NULL)
        return ;
    //中序是左右中 那么再栈中就是 右中左  
    input(&stack,root); //注意的地方1 
    while(!isempty(&stack))
    {
        root = out(&stack);
        if (root == NULL)     return;
        //变的地方就是 先存入根 到了后面读出了根  然后存入右孩子 最后又存入了根   
        //还有一个关键条件是 如果这个数据是叶子 或者是 栈顶元素 那么就可以打印 
        if(root->lchild == NULL&&root->rchild == NULL || !isempty(&stack)&&root->rchild == top(&stack))
        {
            printf("%5d",root->data);
            continue;
        } 
            
        input(&stack,root->rchild);  //右 
        input(&stack,root);//注意的地方2   中 
        if(root->lchild != NULL)    
            input(&stack,root->lchild); //左        
    }

 

 
 
int main()
{
    bittree *root = createtree();
    midvisitbystack2(root);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 基金会开源教育及人才培养峰会来了

开源技术正在快速发展&#xff0c;在云计算、大数据、人工智能等领域逐步形成技术主流。作为一种新的软件生产方式&#xff0c;开源已经被列入“十四五”规划纲要。纲要提出&#xff0c;支持数字技术开源社区等创新联合体发展&#xff0c;完善开源知识产权和法律体系&#xff0…

10.从架构师角度理解MySQL性能优化和索引合并

MySQL性能调优 1. 查询性能优化1.1 什么是慢查询1.2 慢查询的配置1.3 慢查询解读分析1.3.1 日志模式1.3.2 慢查询分析mysqldumpshow 1.4 优化SQL查询方法论1.4.1 业务层--请求了不需要的数据&#xff1f;查询不需要的记录总是取出全部列重复查询相同的数据 1.4.2 执行层--是否在…

File和IO流

1、File 1.1、何为File&#xff1f; File类的对象代表操作系统的文件&#xff08;文件、文件夹&#xff09; File类提供了诸如&#xff1a;创建文件对象代表文件&#xff0c;获取文件信息&#xff08;大小、修改时间&#xff09;、删除文件、创建文件&#xff08;文件夹&…

chatgpt赋能Python-pandas归一化python

Pandas归一化Python教程 越来越多的数据分析和机器学习应用需要将数据归一化&#xff0c;以保证数据的统一性和可比性。Pandas是Python中最常用的数据处理库之一&#xff0c;它提供了许多常用的方法&#xff0c;包括数据归一化。本教程将介绍如何使用Pandas进行数据归一化&…

Springboot地方废物回收机构管理的设计与实现

背景 地方废物回收机构的需求和管理上的不断提升&#xff0c;地方废物回收机构管理的潜力将无限扩大&#xff0c;地方废物回收机构管理系统在业界被广泛关注&#xff0c;本系统及对此进行总体分析&#xff0c;将地方废物回收机构信息管理的发展提供参考。地方废物回收机构管理…

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测 目录 回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 Matlab实现基于贝叶斯线性回归(Bay…

为什么要放弃 $ 语法糖提案

《最新&#xff0c;Vue 中的响应性语法糖已废弃》 本文标题中的 $ 语法糖指的就是上文中的响应式语法糖 (Reactivity Transform)&#xff0c;那为什么不写 Reactivity Transform 呢&#xff1f;因为这个名实在是太长了… 大家觉得被废弃是因为分不清是正常变量还是响应式变量…

chatgpt赋能Python-pycharm关联anaconda

使用PyCharm关联Anaconda打造高效Python开发环境 PyCharm是一个流行的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;而Anaconda则是一个免费、开源的Python发行版。PyCharm与Anaconda的结合使得开发者能够在一个统一的环境中开发Python应用程序。本文将探讨如何…

Vivado综合属性系列之五 USE_DSP

目录 一、前言 二、USE_DSP 2.1 工程代码 2.2 结果 2.3 参考资料 一、前言 ​对于逻辑运算&#xff0c;加、减、乘、除等可以使用逻辑资源LUT实现&#xff0c;也可以使用专用的运算资源DSP来实现。在一些计算量较大时&#xff0c;使用DSP可以节省许多逻辑资源&#xff0c;…

【V2G】电动汽车接入电网优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

目录显示变应用程序需要权限的解决方法

在平日使用电脑的过程中&#xff0c;好多人通常会一些状况&#xff0c;其中最常见的就是目录变应用程序了&#xff0c;许多用户都不确定电脑目录变应用程序打不开怎么办&#xff0c;这种状况不要焦急&#xff0c;下面小编就来给大伙讲一讲电脑目录骤然目录的方法&#xff0c;一…

Windows上配置访问共享

Windows上配置访问共享 方法一&#xff1a;FTP共享方法二&#xff1a;文件共享 方法一&#xff1a;FTP共享 参考该链接&#xff1a;https://blog.csdn.net/qq_41101213/article/details/94214121 方法二&#xff1a;文件共享 本案例是在windows防火墙开启的状态下配置的 给本…

Redis主从

搭建主从架构 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 5之前叫slave&#xff0c;之后叫replica好像 共包含三个节点&#xff0c;一个主节点&#xff0c;两个从节点。 这里我们会…

chatgpt赋能Python-pandas归一化

深入了解Pandas归一化&#xff1a;什么是归一化&#xff0c;为什么需要归一化&#xff1f; Pandas是Python中最常用的数据分析库之一。Pandas提供了许多功能&#xff0c;使数据分析变得更加轻松。其中&#xff0c;归一化是数据分析中一个重要的概念&#xff0c;它将数据缩放到…

chatgpt赋能Python-pycharm如何横向输出

PyCharm如何横向输出 如果你是Python开发者&#xff0c;那么你一定会使用到PyCharm这个IDE&#xff0c;而且PyCharm的强大也是得到大家的一致认可的。但是&#xff0c;有没有遇到过需要横向输出的情况呢&#xff1f;比如输出一个很长的字符串&#xff0c;但是你希望它能够在你…

【利用AI刷面试题】AI:十道不常见的TypeScript面试题

文章目录 前言&#x1f60f;以下是关于 TypeScript 的一些偏僻的面试题&#x1f61d;1. 泛型约束中的 "extends" 关键字有哪些用法和含义&#xff1f;2. 什么是交叉类型&#xff08;Intersection Types&#xff09;&#xff1f;如何在 TypeScript 中定义和使用它们&a…

chatgpt赋能Python-pycharm如何加库

Pycharm如何加库&#xff1a;A Complete Guide Pycharm是一款强大的Python集成开发环境(IDE)&#xff0c;它提供了许多有用的工具和功能来简化Python开发过程。尽管Pycharm已经内置了许多功能和工具&#xff0c;但我们在开发过程中仍然需要使用第三方库来提高效率。在本文中&a…

MySQL 常用/见函数

目录 日期函数 字符串函数 数学函数 其它函数 日期函数 获得时分秒&#xff1a; select current_time(); ---------------- | current_time() | ---------------- | 13 :51:21 | ---------------- 日期就是date 获得时间戳&#xff1a; select current_timestamp()…

chatgpt赋能Python-pycharm中添加库

PyCharm中添加库&#xff1a;让你的Python开发更加高效 Python是一种高级编程语言&#xff0c;因其易学易用的特性被广泛应用于Web开发、数据分析、人工智能等领域。PyCharm是Python开发的一种强大的IDE&#xff08;集成开发环境&#xff09;&#xff0c;它提供了各种有用的功…

【P24】JMeter 正则表达式用户参数(RegEx User Parameters)

文章目录 一、准备工作二、测试计划设计 一、准备工作 慕慕生鲜&#xff1a; http://111.231.103.117/#/login 进入网页后&#xff0c;登录&#xff0c;页面提供了账户和密码 搜索框输入“虾” 右键检查或按F12&#xff0c;打开调试工具&#xff0c;点击搜索 二、测试计划设…