【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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

建议:

上面的算法虽然比较简单,也比较基础,但是还是建议朋友们应该多加练习和锻炼。

一步一步写算法(之二叉树深度遍历)相关推荐

  1. 【数据结构与算法】二叉树深度遍历

    leetcode:力扣本题链接 leetcode所有深度遍历链接 !!!后文有动画演示一定要结合动画理解!!! 遍历顺序取决于中间节点所在的位置,假如中间节点在最后,那么就是后序遍历. 在非递归算法中 ...

  2. Day13——二叉树深度遍历的栈实现

    如果明白了之前递归深度遍历二叉树,那也能容易想到用栈实现二叉树深度遍历. 本篇博客以这棵树为例: 中序遍历 中序遍历顺序:左子树,当前结点,右子树. 从根结点A开始,先将它压栈,发现它有左孩子,则处理 ...

  3. 深度优先遍历算法-03二叉树路径遍历问题

    二叉树路径遍历 简述 比较基础的一个DFS的题目,但是确实很多难题的模板.LeetCode很多二叉树的题本质上就是这个路径遍历. 本题为了输出路径,使用DFS的经典结构栈完成. 问题描述 给定一个二叉 ...

  4. 数据结构与算法之二叉树广度遍历、深度遍历总结

    什么是树,它是和链表一样都是一种抽象数据类型(ADT),包括数据结构和对数据的操作. 树是一种二维平面的数据结构结构,它也是由节点组成的,只是它的后继节点不止一个,而链表的后继节点只有一个. 树具有以 ...

  5. 算法(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后序遍 ...

  6. 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...

    二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...

  7. [Leetcode][第100题][JAVA][相同的树][二叉树][深度遍历][递归]

    [问题描述][中等] [解答思路] 深度遍历/递归 终止条件与返回值: 当两棵树的当前节点都为 null 时返回 true 当其中一个为 null 另一个不为 null 时返回 false 当两个都不 ...

  8. 对称二叉树--深度遍历与广度遍历

    问题来源:对称二叉树 问题描述:给定一个二叉树,检查它是否是镜像对称的. 比如,下面这个二叉树是镜像对称的: 1 / 2 2 / \ / 3 4 4 3 而这个二叉树则不是镜像对称的. 1 / 2 2 ...

  9. 抄代码DAY18 二叉树深度遍历的栈实现

    利用栈实现中序遍历. 建立的栈和前几天的类似,都是通用性的,依靠强制类型转换, 支持不同的数据类型. 下面写一下这个通用性的栈 public class ObjectStack {/*栈深度*/pub ...

最新文章

  1. Python OpenCV学习笔记之:分水岭算法分割图像
  2. mysql了解jdbc_JDBC的连接mySql的基本知识
  3. sscom 中文显示 乱码_解决SSM框架使用过程中的中文乱码问题
  4. Mysql Order By 注入总结
  5. [vue] 你有使用过JSX吗?说说你对JSX的理解
  6. v4l2 框架下如何设置分辨率_Linux下如何进行FTP设置
  7. redis数据类型set总结
  8. django.db.utils.OperationalError: (1050, “Table ‘表名‘ already exists)解决方法
  9. HDFS如何检测并删除多余副本块
  10. 活动目录父子域用户迁移之:TFSSharePoint问题汇总(一)
  11. 【每日一知】什么是TAOCP? (2021.02.07)
  12. 智能家居的新想法(2022)
  13. 网络(韩志刚版笔记)
  14. python全栈构图_Python全栈 Web(边框、盒模型、背景)
  15. HTML实现在线代码格式化、美化、加密、解密、压缩、一键转JavaScript功能工具-toolfk程序员工具网
  16. mt5虚拟服务器,mt5云服务器
  17. 掌握电商后台设计,这一篇足矣
  18. Python写停车场收费系统
  19. 运动小插件(有氧运动)
  20. 如何设计标签系统?如果构建用户画像

热门文章

  1. 使用 TeamCity 实现持续集成(CI)
  2. 基于heartbeat v1配置mysql和httpd的高可用双主模型
  3. 提示illegal reference to data member'CPMAgentManageDlg::m_matrixMatrixSt'in a static member function
  4. 小白学习vuex的超级全面版本
  5. js如何操作或是更改sass里的变量
  6. 11 JVM 垃圾回收(上)
  7. tree(2018.10.26)
  8. bzoj3771: Triple
  9. max os取消开机启动
  10. 两周内股指见底概率大