热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据结构(C语言版)严蔚敏二叉树遍历操作二叉树的相关代码

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码相关的知识,希望对你有一定的参考价值。1.二叉

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码相关的知识,希望对你有一定的参考价值。



1. 二叉树的自下而上、从左到右的层次遍历算法

void LevelTraverse2(BiTree T)
BiTree Queue[100],Stack[100];
// 这里用数组代替队列和栈
int i=0,i1=0,j=0;
Queue[0] = T;
while(i1<&#61;i)
T &#61; Queue[i1&#43;&#43;];
Stack[j&#43;&#43;] &#61; T;
if(T->left)
Queue[&#43;&#43;i] &#61; T->left;
if(T->right)
Queue[&#43;&#43;i] &#61; T->right;

while(j>0)
T &#61; Stack[--j];
printf("%c",T->data);

printf("\\n");

【注意】代码中使用数组代替队列和栈。
运行结果如下&#xff1a;

所表示的二叉树为&#xff1a;

使用队列和栈的参考代码为&#xff1a;

void LevelTraverse2(BiTree T)
Queue Q;
Stack S;
BiTree p;
// 定义队列和栈
//初始化队列和栈
if(T)
// 二叉树非空时
InitQueue(Q);
InitStack(S);
EnQueue(Q,T);
// 入队
while(!IsQueueEmpty(Q))
DeQueue(Q,p);
// 出队
Push(S,p);
// 入栈
if(p->lchild)
EnQueue(Q,p->lchild);
// 左孩子非空
if(p->rchild)
EnQueue(Q,p->rchild);

while(!IsStackEmpty(S))
Pop(S,p);
// 出栈
printf("%c",p->data);



思路为&#xff1a;利用原有的层次遍历算法&#xff08;从上至下、从左至右&#xff09;&#xff0c;出队的同时将各节点入栈&#xff0c;在所有节点入栈后再从栈顶依次访问即可。


2.非递归算法求二叉树的高度

int BitDepth(BiTree T)
if(!T)
return 0;

// 如果二叉树为空
int f &#61; 0,r &#61; 0;
int level &#61; 0,last &#61; 1;
BiTree Queue[100];
Queue[r&#43;&#43;] &#61; T;
BiTree p;
while(f<r)
p &#61; Queue[f&#43;&#43;];
if(p->left)
Queue[r&#43;&#43;] &#61; p->left;
if(p->right)
Queue[r&#43;&#43;] &#61; p->right;
if(last &#61;&#61; f)
level&#43;&#43;;
last &#61; r;


return level;

运行结果&#xff08;所用的二叉树和上述一样&#xff09;&#xff1a;

思路&#xff1a;采用层次遍历算法&#xff0c;设置变量level记录当前节点所在的层次&#xff0c;设置变量last指向当前层的最右节点&#xff0c;每次层次遍历出队时与last指针比较&#xff0c;若两者相同&#xff0c;则层数加1&#xff0c;并让last指向下一层的最右节点&#xff0c;直到遍历完成。


推荐阅读
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • 管理UINavigationController中的手势返回 - Managing Swipe Back Gestures in UINavigationController
    本文介绍了如何在一个简单的闪存卡片应用中实现平滑的手势返回功能,以增强用户体验。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本问题涉及在给定的无向图中寻找一个至少包含三个节点的环,该环上的节点不重复,并且环上所有边的长度之和最小。目标是找到并输出这个最小环的具体方案。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • C语言中的指针详解
    1.什么是指针C语言中指针是一种数据类型,指针是存放数据的内存单元地址。计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节, ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了在单片机编程中常用的几个C库函数,包括printf、memset、memcpy、strcpy和atoi,并提供了具体的使用示例和注意事项。 ... [详细]
author-avatar
凌晨丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有