二分搜索树遍历方式


二分搜索树的遍历方式

前言

二分搜索树是我们在编程中最常遇到的树结构,我们下面来聊聊二分搜索树的前序遍历、中序遍历和后序遍历。

树结构
int[] nums = {28, 16, 13, 22, 30, 42, 29};

          28
        /     \
       /       \
      /         \
     16          30
    /   \       /   \
   /     \     /     \
  /       \   /       \
13        22 29        42
树节点遍历

对于树节点,遍历的过程中都会经过三次。
28->16->13->13->13->16->22->22->22->16->28->30->29->29->29->30->42->42->42->30->28
前序遍历即各个节点的第一次遍历:
28->16->13->22->30->29->42
中序遍历即各个节点的第二次遍历:
13->16->22->28->29->30->42
后序遍历即各个节点的第三次遍历:
13->22->16->29->42->30->28

前序遍历

前序遍历,即为第一次经过该节点的时候对该节点进行标记。

/**
* 前序遍历
*/
public void preOrder() {
    preOrder(root);
}

/**
* 前序遍历
*
* @param node
*/
private void preOrder(Node node) {
    if (node == null) {
        return;
    }
    System.out.print(node.e + "\t");
    preOrder(node.left);
    preOrder(node.right);
}
输出结果:

28 16 13 22 30 29 42

中序遍历

中序遍历,即为第二次经过该节点的时候对该节点进行标记。

/**
 * 中序遍历,顺序
 */
public void inOrder() {
    inOrder(root);
}

/**
 * 中序遍历,顺序
 */
private void inOrder(Node node) {
    if (node == null) {
        return;
    }

    inOrder(node.left);
    System.out.print(node.e + "\t");
    inOrder(node.right);
}
输出结果:

13 16 22 28 29 30 42

后序遍历

后序遍历,即为第三次经过该节点的时候对该节点进行标记。

/**
 * 后序遍历
 */
public void postOrder() {
    postOrder(root);
}

/**
 * 后序遍历
 */
private void postOrder(Node node) {
    if (node == null) {
        return;
    }

    postOrder(node.left);
    postOrder(node.right);
    System.out.print(node.e + "\t");
}
输出结果:

13 22 16 29 42 30 28


文章作者: many2many
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 many2many !
 上一篇
Redis高并发下缓存失效问题 Redis高并发下缓存失效问题
高并发下缓存失效问题:缓存穿透、缓存雪崩和缓存击穿。
2020-05-25
下一篇 
JXLS 2.x 模板导出 JXLS 2.x 模板导出
我之前一直使用`jxls 1.x`版本对简单的列表进行导出,模板定义很简单,导出数据开发工作很轻松。最近使用`jxls 2.x`版本来导出数据,`2.x`版本变化最大的就是批注的方式定义模板,支持的功能更我之前一直使用`jxls 1.x`版本对简单的列表进行导出,模板定义很简单,导出数据开发工作很轻松。