第十一周上机实践—项目1(3)—中序线索化二叉树的算法验证

中序线索化二叉树的非递归算法 中序线索化二叉树的非递归算法:设计技巧:依某种顺序遍历二叉树,对每个结点p,判断其左指针是否为空,以及其前驱结点pre的右指针是否为空。 立即下载
/*
 *Copyright(c) 2015,烟台大学计算机学院
 *All rights reserved.
 *文件名称:test.cpp
 *作者:林莉
 *完成日期:2015年11月09日
 *版本:v1.0
 *实现问题: 中序线索化二叉树的算法验证
 *输入描述:无
 *程序输出:所得结果。
*/

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

#define MaxSize 100
typedef char ElemType;
typedef struct node
{
    ElemType data;
    int ltag,rtag;      //增加的线索标记
    struct node *lchild;
    struct node *rchild;
} TBTNode;

void CreateTBTNode(TBTNode * &b,char *str)
{
    TBTNode *St[MaxSize],*p=NULL;
    int top=-1,k,j=0;
    char ch;
    b=NULL;             //建立的二叉树初始时为空
    ch=str[j];
    while (ch!='\0')    //str未扫描完时循环
    {
        switch(ch)
        {
        case '(':
            top++;
            St[top]=p;
            k=1;
            break;      //为左结点
        case ')':
            top--;
            break;
        case ',':
            k=2;
            break;                          //为右结点
        default:
            p=(TBTNode *)malloc(sizeof(TBTNode));
            p->data=ch;
            p->lchild=p->rchild=NULL;
            if (b==NULL)                    //*p为二叉树的根结点
                b=p;
            else                            //已建立二叉树根结点
            {
                switch(k)
                {
                case 1:
                    St[top]->lchild=p;
                    break;
                case 2:
                    St[top]->rchild=p;
                    break;
                }
            }
        }
        j++;
        ch=str[j];
    }
}

void DispTBTNode(TBTNode *b)
{
    if (b!=NULL)
    {
        printf("%c",b->data);
        if (b->lchild!=NULL || b->rchild!=NULL)
        {
            printf("(");
            DispTBTNode(b->lchild);
            if (b->rchild!=NULL) printf(",");
            DispTBTNode(b->rchild);
            printf(")");
        }
    }
}

TBTNode *pre;                       //全局变量

void Thread(TBTNode *&p)
{
    if (p!=NULL)
    {
        Thread(p->lchild);          //左子树线索化
        if (p->lchild==NULL)        //前驱线索
        {
            p->lchild=pre;          //建立当前结点的前驱线索
            p->ltag=1;
        }
        else p->ltag=0;
        if (pre->rchild==NULL)      //后继线索
        {
            pre->rchild=p;          //建立前驱结点的后继线索
            pre->rtag=1;
        }
        else pre->rtag=0;
        pre=p;
        Thread(p->rchild);          //右子树线索化
    }
}

TBTNode *CreaThread(TBTNode *b)     //中序线索化二叉树
{
    TBTNode *root;
    root=(TBTNode *)malloc(sizeof(TBTNode));  //创建根结点
    root->ltag=0;
    root->rtag=1;
    root->rchild=b;
    if (b==NULL)                //空二叉树
        root->lchild=root;
    else
    {
        root->lchild=b;
        pre=root;               //pre是*p的前驱结点,供加线索用
        Thread(b);              //中序遍历线索化二叉树
        pre->rchild=root;       //最后处理,加入指向根结点的线索
        pre->rtag=1;
        root->rchild=pre;       //根结点右线索化
    }
    return root;
}

void ThInOrder(TBTNode *tb)
{
    TBTNode *p=tb->lchild;      //指向根结点
    while (p!=tb)
    {
        while (p->ltag==0) p=p->lchild;
        printf("%c ",p->data);
        while (p->rtag==1 && p->rchild!=tb)
        {
            p=p->rchild;
            printf("%c ",p->data);
        }
        p=p->rchild;
    }
}

int main()
{
    TBTNode *b,*tb;
    CreateTBTNode(b,"A(B(D(,G)),C(E,F))");
    printf(" 二叉树:");
    DispTBTNode(b);
    printf("\n");
    tb=CreaThread(b);
    printf(" 线索中序序列:");
    ThInOrder(tb);
    printf("\n");
    return 0;
}


运行结果:

中序线索二叉树详细讲解及c语言代码.txt 中序线索二叉树详细讲解及c语言代码.txt,中序线索二叉树详细讲解及c语言代码.txt 立即下载

相关推荐

二叉树的线索化(中序线索二叉树)

NULL 博文链接:https://128kj.iteye.com/blog/1634367

第十一周项目1-二叉树算法验证(中序线索化二叉树的算法验证 )

问题及代码:        以中序线索树为例。 程序代码: #include #include #define MaxSize 100 typedef char ElemType; typedef struct node { ElemType data; int ltag,rtag; //增加的线索标记 struct node *lc

wx6226的博客 399

将二叉树按中序线索化的算法(C)

中序线索化的C程序 中序线索化的C程序 中序线索化的C程序 中序线索化的C程序 中序线索化的C程序

数据结构例程——线索化二叉树(中序)

本文是数据结构基础系列(6):树和二叉树中第14课时线索二叉树的例程。 #include <stdio.h> #include <malloc.h> #define MaxSize 100 typedef char ElemType; typedef struct node { ElemTyp...

weixin_33755649的博客 412

[捷稀 JCG Q30 Pro 刷机说明] 以刷入openwrt24.10为例

摘要: 本文详细介绍了捷稀JCG Q30 Pro路由器刷入OpenWrt 24.10系统的步骤。通过先刷入OpenWrt 23.05过渡固件,再升级Uboot,最后通过TFTP加载工厂镜像完成刷机。关键步骤包括解锁分区、刷写Uboot、进入恢复模式及配置网络。文章还提供了无线设置、Tailscale内网穿透等进阶命令,并附参考文档和固件下载链接。适用于有一定技术基础的玩家,需注意操作风险,严格按流程执行。

贤时间 7142

Verilator+VSCode实战:5分钟搞定Verilog语法检查与波形调试

本文详细介绍了如何将Verilator仿真器与VSCode编辑器高效集成,打造极速的Verilog开发工作流。通过环境配置、实时语法检查、一键仿真与波形生成等实战技巧,帮助IC设计工程师在几分钟内完成从代码编写到波形调试的全过程,大幅提升中小规模模块的验证效率。

weixin_28454475的博客 470

第十一周实践项目1—验证算法(3)中序线索化二叉树的算法验证

/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:项目1-3.cbp 作 者:刘晨筱 完成日期:2015年11月15日 版 本 号:v1.0 问题描述:实现中序线索化二叉树的算法验证,并测试数据。 输入描述:无 程序输出:测试数据 */  文件代码:#include #incl

优快云如何转载别人博客 414

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1827

二叉树线索化以及线索化的先序、中序、后序遍历

二叉树线索化以及线索化的先序、中序、后序遍历 有详细的图解 和 程序代码 解读,以及 为什么要线索化二叉树

CodingStart 5万+

SCCM部署教程:(3)SCCM安装

这两则摘要介绍了WSUS和SCCM的安装步骤: WSUS安装:通过服务器管理器添加"Windows服务器更新服务"角色,选择SQL数据库并指定安装路径,验证数据库连接后完成安装。 SCCM安装:先运行预检工具Prereqchk.exe,选择主站点安装类型,配置语言、站点代码和名称,设置SQL数据库连接参数(保留默认端口4022),选择通信方法和系统角色(管理点和分发点),最后完成约1小时的安装过程。 两则安装指南都强调要确保数据库配置与前期准备一致,并提供了关键配置选项的说明。

小V锅的专栏 915

Ubuntu 24.04.3 LTS 安装 OpenClaw 图文版

OpenClow安装指南

qq_17204557的博客 2551

C语言经典算法之二叉树的中序线索化

中序线索化是一种在二叉树中提供额外信息以加速中序遍历的方法。通过中序线索化,我们为每个节点添加指向其在中序遍历中前驱和后继的线索。这使得在遍历时可以更快地找到前后相邻的节点,而无需通过递归或栈的方式。

weixin_56154577的博客 1418

薅“刷宝”羊毛的autojs脚本教程,简单粗暴好用!!!

本教程旨在帮助大家实现用手机或闲置手机来进行“刷宝”平台的收益,能薅多少米就看你的本事了,作者教你的是如何用autojs来进行脚本的挂机教程,掌握了这个思路后,你可以根据自己的实际需要来改进脚本或者撸别的平台:) 适用系统,**android4.0以上,苹果机暂不适用**(大多数android系统手机都是7.0以上,要查看自己手机是android几,见文件夹“视频教程-基础”>1.查看android版本的方法)

rousseaou8的博客 8万+

第十一周 项目1-3 中序线索化二叉树的算法验证

/* 文件名称:main.cpp 作者 :孙彩虹 完成日期:2015年11月27日 问题描述:中序线索化二叉树的算法验证 */ 代码: #include #include #define MaxSize 100 typedef char ElemType; typedef struct node { ElemT

balabala0322的博客 383

AutoLisp文件(.lsp)从编写到加载运行:一份给CAD新手的避坑指南

本文为CAD新手提供了一份AutoLisp文件(.lsp)从编写到加载运行的完整指南,涵盖编写环境配置、文件加载流程、调试技巧及工程化实践建议。通过详细的步骤和常见错误解决方案,帮助用户避免常见陷阱,提升AutoLisp脚本的开发效率和应用效果。

weixin_29228203的博客 896

AI数字人直播带货全攻略:从零搭建到高效运营

本文提供了一份从零开始搭建与运营AI数字人直播间的完整指南。详细解析了AI数字人直播带货的核心价值与适用场景,并分步讲解了硬件准备、软件选择、数字人创建、话术编排、OBS推流设置及开播测试等关键环节。最后,文章还分享了高效运营策略与常见避坑指南,旨在帮助商家利用AI技术实现降本增效,打造24小时不间断的智能带货直播间。

weixin_29269441的博客 2236

第11周项目1-验证算法(3)中序线索化二叉树的算法验证

问题: /* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:项目1-3.cbp 作 者:杨雅鑫 完成日期:2016年11月9日 版 本 号:v1.0 问题描述:实现中序线索化二叉树的算法验证,并测试数据。 输入描述:无 程序输出:测试数据 */ 代码: #include #include

yyx的博客 328

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第十一周项目1-(3)中序线索化二叉树的算法验证

问题及代码: /* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:ccc.cpp 作 者:陈梦雪 完成日期:2016年11月17日 版 本 号:v1.0 问题描述:实现中序线索化二叉树的算法,并进行测试。 输入描述:无 程序输出:测试数据 */ 代码: #include #incl

Parislun的博客 469

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证

问题及代码 /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1.cpp * 作 者:陈迪 * 完成日期:2016年11月9日 * 版 本 号:v1.0 *问题描述:实现中序线索化二叉树的算法验证,并测试数据。 *输入描述:无 *程序输出:

chendi19的博客 227

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

第10周项目3- 中序线索化二叉树的算法验证

/* * Copyright(c) 2017,烟台大学计算机学院 * All rights reserved. * 文件名称:cpp1. * 作 者:宋昊 * 完成日期:2017 年 11 月 12 日 * 版 本 号:v1.0 * * 问题描述: 实现二叉树的中序线索化二叉树的算法验证。 * 输入描述:无需输入 * 程序输出:实现各种算法的函数的测试结果 */ #

qq_37151959的博客 234

第11周上机实践项目1—二叉树算法验证(3)中序线索化二叉树的算法验证

问题及代码: /* *Copyright(c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:test.cpp *作者:颜肖璇 *完成日期:2015年11月9日 *版本号:v1.0 /* *问题描述: *输入描述:

yxxhilda的博客 321

第十周 项目 1 — (3)中序线索化二叉树的算法验证

/* * Copyright (c) 2017,烟台大学计算机学院 * All right reserved. * 文件名称:main.cpp * 作者:王华慧 * 完成日期:2017年11月8日 * 版本号:v1.0 * *

wanghuahui1的博客 276

第十一周项目一:验证算法(3)中序线索化二叉树二叉树的算法验证

/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:项目1-3.cbp 作    者:孙立立 完成日期:2015年12月7日 版 本 号:v1.0 问题描述:实现中序线索化二叉树的算法验证,并测试数据。 输入描述:无 程序输出:测试数据 */ 代码: #include #incl

Slingchen的博客 462

第11周—项目1(3) 中序线索化二叉树的算法验证

问题描述及代码:

yang66886的博客 439
上一篇: 第十一周上机实践—项目1(2)—二叉树构造算法的验证
下一篇: 第十一周上机实践—项目1(4)—哈夫曼编码的算法验证
Zero_LinLi
博客等级 码龄11年 15粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值