热门标签 | 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;直到遍历完成。


推荐阅读
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • LeetCode: 实现队列与栈的高级应用
    本文介绍如何使用队列和栈实现特定功能,包括动态维护队列元素并计算其平均值,以及栈操作中的优化技巧。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文详细介绍了8051系列微控制器的中断系统,特别是C51编译器中interrupt和using关键字的作用及其使用方法。通过深入分析这两个关键字的功能,帮助开发者更好地理解和优化中断程序的设计。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
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社区 版权所有