树的三种遍历

一棵树的三种遍历方式:先序遍历,中序遍历,后序遍历。
前中后三种顺序其实指的是根的顺序。

先序遍历:根节点、左子树、右子树
中序遍历:左子树、根节点、右子树
后序遍历:左子树、右子树、根节点

所以就是说先中后的顺序都是指根节点,除了根节点之外都是先左子树后右子树

举个例子:

遍历结果:
前序:FCADBEHGM
中序:ACBDFHEMG
后序:ABDCHMGEF

代码实现:
树结构构造代码:

/*** 树结构*/
public class MyTree {private MyNode root;public MyNode getRoot() {return root;}public void setRoot(MyNode root) {this.root = root;}
}

树结点的构造代码:

public class MyNode {// 左子节点private MyNode lNode;// 数据域private String data;// 右子节点private MyNode rNode;public MyNode(MyNode lNode, String data, MyNode rNode) {this.lNode = lNode;this.data = data;this.rNode = rNode;}public MyNode() {}public MyNode getlNode() {return lNode;}public void setlNode(MyNode lNode) {this.lNode = lNode;}public String getData() {return data;}public void setData(String data) {this.data = data;}public MyNode getrNode() {return rNode;}public void setrNode(MyNode rNode) {this.rNode = rNode;}
}

构造一个树结构:

public static void main(String[] args) {MyTree tree = new MyTree();MyNode cNode = new MyNode(null, "C", null);MyNode eNode = new MyNode(null, "E", null);MyNode fNode = new MyNode(null, "F", null);MyNode bNode = new MyNode(cNode, "B", null);MyNode dNode = new MyNode(eNode, "D", fNode);MyNode aNode = new MyNode(bNode, "A", dNode);tree.setRoot(aNode);}

树结构如下:

1. 前序遍历:先访问根结点,然后前序遍历左子树,再前序遍历右子树。

 // 前序遍历private static void frontSort(MyNode node) {if (node == null) {return;}System.out.println(node.getData());// 遍历左子树frontSort(node.getlNode());// 遍历右子树frontSort(node.getrNode());}

2. 中序遍历:从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根结点

 // 中序遍历private static void middleSort(MyNode node) {if (node == null) {return;}// 遍历左子树middleSort(node.getlNode());System.out.println(node.getData());// 遍历右子树middleSort(node.getrNode());}

3. 后序遍历:从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点

 // 后序遍历private static void postSort(MyNode node) {if (node == null) {return;}// 遍历左子树postSort(node.getlNode());// 遍历右子树postSort(node.getrNode());System.out.println(node.getData());}

树的三种遍历原理及实现相关推荐

  1. python 递归实现树的三种遍历

    python 递归实现树的三种遍历 class TreeNode:def __init__(self,data):self.data = dataself.left = Noneself.right ...

  2. c语言二叉树的遍历菜单系统,C语言二叉树的三种遍历方式的实现及原理

    C语言二叉树的三种遍历方式的实现及原理 发布时间:2020-10-03 19:43:57 来源:脚本之家 阅读:63 作者:看雪. 二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个 ...

  3. c语言中二叉树中总结点,C语言二叉树的三种遍历方式的实现及原理

    二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个名字?是根据根节点的顺序命名的. 比如上图正常的一个满节点,A:根节点.B:左节点.C:右节点,前序顺序是ABC(根节点排最先,然后 ...

  4. python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)

    树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ######################P6.4 数据结构### ...

  5. C语言基本数据结构之二(二叉树的三种遍历,节点数以及深度算法)

    关于二叉树的定义,网上有比较好的介绍,在这里就简单介绍二叉树的一些性质 二叉树的基本性质 1)二叉树的第i层上至多有 2^(i-1)(i ≥1)个结点: 2)深度为 h 的二叉树中至多含有 2^h – ...

  6. for-forEach-stream.forEach三种遍历方法

    java8新出的循环方式,在网上有大量的道友说用流的方式效率反而更低了. 大量的结论表明,这种方式只是语法糖(for-forEach-stream三种遍历方法执行效率比较与选用思考 - ZZY1078 ...

  7. 二叉树的三种遍历(递归与非递归) + 层次遍历

    <转载于  >>> > 二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的.二叉树有前.中.后三种遍历方式,因为树的本身就是用递归定义的,因此 ...

  8. 二叉树三种遍历方式的非递归实现

    树的递归实现方式很简单,下面介绍三种遍历的非递归实现. 树的遍历有个特点,那就是在处理具体问题时,绝大多数情况下是在当前循环.或函数(或是子树)的根节点来处理的,能够注意到当前根节点是如何从上个根节点 ...

  9. 二叉树----数据结构:二叉树的三种遍历及习题

    二叉树----数据结构:二叉树的三种遍历,利用递归算法. 关于二叉树的遍历,应用非常广泛,不单单是访问打印结点,还可以进行一系列的操作,如赋值.删除.查找.求二叉树的深度等等. 有递归和非递归两种算法 ...

最新文章

  1. iOS进阶之架构设计MVVM模式仿新闻项目(6)
  2. IntelliJ IDEA :Error:(1, 1) java: 非法字符: '\ufeff'
  3. 非华为手机可以鸿蒙,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  4. 雷林鹏分享:CSS 链接
  5. 获得最新纪录 sql
  6. Cachefiled
  7. 苹果4怎么越狱_苹果手机如何截屏
  8. mxnet入门--第4篇
  9. c语言指针详解pdf下载,C语言指针详解.pdf
  10. 21世纪最需要的7种人才
  11. Safari兼容IE
  12. 5S管理活动的实施和运行方案
  13. 邮件服务解决方案--iRedMail
  14. nginx 代理oss图片,带权限控制
  15. 从14连号概率题来看“做学问不知足”
  16. MySQL必知必会6
  17. 斑马打印机-中文打印
  18. 海康威视旗下萤石网络上市:首日跌12% 公司市值142亿
  19. 台式计算机找不到无线连接,我的win7台式机找不到无线网卡解决方法介绍
  20. Machine Learning Exercise 1.1

热门文章

  1. 解决windows 10无法打开.hlp帮助文件的问题
  2. [Android crash report]Windows部署ACRA
  3. IIS安装过程中可能遇到的问题及解决方法
  4. Spark计算工具类
  5. 滴滴杜欢:大型微服务框架设计实践
  6. 【高数复盘】2.3高阶导数
  7. 1_15_python基础学习_0501
  8. 重点人员管控系统开发,合成作战平台建设方案
  9. 09 MySQL用户管理
  10. 在家里如何用两个或多个路由器发射wifi