当前位置:   article > 正文

二叉树的先序、中序、后序以及层次遍历_先序遍历

先序遍历

二叉树的先序、中序、后序以及层次遍历

方法:在遍历二叉树的时候,一个节点的遍历我们把它看做要经过它三次(下图红色区域)。

当经过一次,被写出来的点,我们称它为先序遍历

当经过两次,被写出来的点,我们称它为中序遍历。

当经过三次,被写出来的点,我们称它为后序遍历。

1、先序(根)遍历

先序遍历(D-L-R),按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。巧记:根左右。

先序遍历(只结果该节点一次,就被记录下来)

2、中序(根)遍历

 中序遍历(LDR),按照左根右的顺序沿一定路径经过路径上所有的结点,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树,巧记:左根右。

 3、后序(根)遍历

 后序遍历(LRD),按照左右根的顺序沿一定路径经过路径上所有的结点,后序遍历首先遍历左子树,然后访问右子树,最后遍历根结点,巧记:左右根。

 4、层次遍历

按照二叉树的层数,一层层遍历。

要进行层次遍历,需要建立一个循环队列。先将二叉树头结点入队列,再将头结点的左、右节点入队列,此时头节点就可以出队列遍历,然后重复上面的操作直到队头和队尾为空,这就是层次遍历。

注:在二叉树遍历中先序和中序或者中序和后序可以确定唯一的一棵二叉树。

 例如:一棵二叉树的中序是:BDCAEHGKF    后序是:DCBHKGFEA

就可以得到该二叉树的结构如下:

 代码:

节点类

  1. public class Node {//节点类
  2. public int data;//数据域
  3. public Node lnode;//左节点
  4. public Node rnode;//右节点
  5. public void addNode(Node n) {
  6. if(n.data < this.data) {//左节点
  7. if(lnode == null) {
  8. lnode = n;
  9. }else lnode.addNode(n);
  10. }else {
  11. if(rnode == null) {
  12. rnode = n;
  13. }else rnode.addNode(n);
  14. }
  15. }
  16. public void xianxu() {//先序遍历
  17. System.out.print(this.data);
  18. if(lnode != null) lnode.xianxu();
  19. if(rnode != null) rnode.xianxu();
  20. }
  21. public void zhongxu() {//中序遍历
  22. if(lnode != null) lnode.zhongxu();
  23. System.out.print(this.data);
  24. if(rnode != null) rnode.zhongxu();
  25. }
  26. public void houxu() {//后序遍历
  27. if(lnode != null) lnode.houxu();
  28. if(rnode != null) rnode.houxu();
  29. System.out.print(this.data);
  30. }
  31. }

树类

  1. public class MyTree {
  2. private Node root;//根节点
  3. public void add(int a) {
  4. Node n = new Node();
  5. n.data = a;
  6. if(root == null) {
  7. root = n;
  8. }else {
  9. root.addNode(n);
  10. }
  11. }
  12. public void sort() {
  13. if(root == null) return;
  14. else root.zhongxu();
  15. }
  16. public static void main(String[] args) {
  17. MyTree mt = new MyTree();
  18. mt.add(5);
  19. mt.add(4);
  20. mt.add(8);
  21. mt.add(6);
  22. mt.add(0);
  23. mt.sort();
  24. System.out.println();
  25. }
  26. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/625802
推荐阅读
相关标签
  

闽ICP备14008679号