一步一步写算法(之二叉树深度遍历)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
深度遍历是软件开发中经常遇到的遍历方法。常用的遍历方法主要有下面三种:(1)前序遍历;(2)中序遍历;(3)后序遍历。按照递归的方法,这三种遍历的方法其实都不困难,前序遍历就是根-左-右,中序遍历就是左-根-右,后续遍历就是左-右-根。代码实现起来也不复杂。
1)前序遍历
void preorder_traverse(TREE_NODE* pTreeNode)
{if(pTreeNode){printf("%d", pTreeNode->data);preorder_traverse(pTreeNode->left);preorder_traverse(pTreeNode->right);}
}
2)中序遍历
void inorder_traverse(TREE_NODE* pTreeNode)
{if(pTreeNode){inorder_traverse(pTreeNode->left);printf("%d", pTreeNode->data);inorder_traverse(pTreeNode->right);}
}
3)后序遍历
void afterorder_traverse(TREE_NODE* pTreeNode)
{if(pTreeNode){afterorder_traverse(pTreeNode->left);afterorder_traverse(pTreeNode->right);printf("%d", pTreeNode->data);}
}
4)后序遍历的一个应用
上面的遍历方法看上去都比较简单,那他们的应用是什么呢?我们可以拿编程语言中语法树举一个例子。比如说,现在我们需要计算这样一个简单的表达式:
int m = 1 + 2 * 5 -4 / 2;
那么这个表达式的语法树可能是这样的,其中末尾的分号已经删除。
现在,我们对上面的表达式进行后序遍历,结果应该是这样的: m、1、2、5、*、+、4、2、/、-、=。那么这个输出的表达式,我们应该怎么计算呢?其实不复杂,我们只要发现连续两个数字和一个相连的符号就可以计算了,上面的表达式计算顺序应该是这样的:
/*
* =
* / \
* m -
* / \
* + /
* / \ / \
* 1 * 4 2
* / \
* 2 5
*/
a)m、1、2、5、*、+、4、2、/、-、=
b)m、1、10、+、4、2、/、-、=
c)m、11、4、2、/、-、=
d)m、11、2、-、=
e)m、9、=
f)m
建议:
上面的算法虽然比较简单,也比较基础,但是还是建议朋友们应该多加练习和锻炼。
一步一步写算法(之二叉树深度遍历)相关推荐
- 【数据结构与算法】二叉树深度遍历
leetcode:力扣本题链接 leetcode所有深度遍历链接 !!!后文有动画演示一定要结合动画理解!!! 遍历顺序取决于中间节点所在的位置,假如中间节点在最后,那么就是后序遍历. 在非递归算法中 ...
- Day13——二叉树深度遍历的栈实现
如果明白了之前递归深度遍历二叉树,那也能容易想到用栈实现二叉树深度遍历. 本篇博客以这棵树为例: 中序遍历 中序遍历顺序:左子树,当前结点,右子树. 从根结点A开始,先将它压栈,发现它有左孩子,则处理 ...
- 深度优先遍历算法-03二叉树路径遍历问题
二叉树路径遍历 简述 比较基础的一个DFS的题目,但是确实很多难题的模板.LeetCode很多二叉树的题本质上就是这个路径遍历. 本题为了输出路径,使用DFS的经典结构栈完成. 问题描述 给定一个二叉 ...
- 数据结构与算法之二叉树广度遍历、深度遍历总结
什么是树,它是和链表一样都是一种抽象数据类型(ADT),包括数据结构和对数据的操作. 树是一种二维平面的数据结构结构,它也是由节点组成的,只是它的后继节点不止一个,而链表的后继节点只有一个. 树具有以 ...
- 算法(2)-二叉树的遍历(递归/迭代)python实现
二叉树的遍历 1.深度优先DFS 1.1 DFS 递归解法 1.1.1先序遍历 1.1.2中序遍历 1.1.3后序遍历 1.2 DFS迭代解法 1.2.1先序遍历 1.2.2中序遍历 1.2.3后序遍 ...
- 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...
二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...
- [Leetcode][第100题][JAVA][相同的树][二叉树][深度遍历][递归]
[问题描述][中等] [解答思路] 深度遍历/递归 终止条件与返回值: 当两棵树的当前节点都为 null 时返回 true 当其中一个为 null 另一个不为 null 时返回 false 当两个都不 ...
- 对称二叉树--深度遍历与广度遍历
问题来源:对称二叉树 问题描述:给定一个二叉树,检查它是否是镜像对称的. 比如,下面这个二叉树是镜像对称的: 1 / 2 2 / \ / 3 4 4 3 而这个二叉树则不是镜像对称的. 1 / 2 2 ...
- 抄代码DAY18 二叉树深度遍历的栈实现
利用栈实现中序遍历. 建立的栈和前几天的类似,都是通用性的,依靠强制类型转换, 支持不同的数据类型. 下面写一下这个通用性的栈 public class ObjectStack {/*栈深度*/pub ...
最新文章
- Python OpenCV学习笔记之:分水岭算法分割图像
- mysql了解jdbc_JDBC的连接mySql的基本知识
- sscom 中文显示 乱码_解决SSM框架使用过程中的中文乱码问题
- Mysql Order By 注入总结
- [vue] 你有使用过JSX吗?说说你对JSX的理解
- v4l2 框架下如何设置分辨率_Linux下如何进行FTP设置
- redis数据类型set总结
- django.db.utils.OperationalError: (1050, “Table ‘表名‘ already exists)解决方法
- HDFS如何检测并删除多余副本块
- 活动目录父子域用户迁移之:TFSSharePoint问题汇总(一)
- 【每日一知】什么是TAOCP? (2021.02.07)
- 智能家居的新想法(2022)
- 网络(韩志刚版笔记)
- python全栈构图_Python全栈 Web(边框、盒模型、背景)
- HTML实现在线代码格式化、美化、加密、解密、压缩、一键转JavaScript功能工具-toolfk程序员工具网
- mt5虚拟服务器,mt5云服务器
- 掌握电商后台设计,这一篇足矣
- Python写停车场收费系统
- 运动小插件(有氧运动)
- 如何设计标签系统?如果构建用户画像
热门文章
- 使用 TeamCity 实现持续集成(CI)
- 基于heartbeat v1配置mysql和httpd的高可用双主模型
- 提示illegal reference to data member'CPMAgentManageDlg::m_matrixMatrixSt'in a static member function
- 小白学习vuex的超级全面版本
- js如何操作或是更改sass里的变量
- 11 JVM 垃圾回收(上)
- tree(2018.10.26)
- bzoj3771: Triple
- max os取消开机启动
- 两周内股指见底概率大