二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!

二叉树的四种遍历方式

相信大家能够看到二叉树的遍历就已经对二叉树本身有了足够的了解,这里就不进行过多的赘述了,我们直接进入正题。我们知道线性数据结构的遍历一般就是前序遍历和后序遍历,而二叉树的遍历常见的有三种:前序遍历、中序遍历、后序遍历(注意:前中后是针对根节点而言的),有时候也会提到层序遍历。

前序遍历(Preorder Traversal)

访问顺序:根节点——>前序遍历左子树——>前序遍历右子树

在这里插入图片描述

代码实现

/**
* 通过递归实现
* 对树进行前序遍历
* @param node 需要进行前序遍历的树的根节点,比如首先是大树的根节点,再是左子树的根节点,一直调用
*/
public void preOrderTraversal(Node<E> node){
    if (node == null) {
    	return;
    }
    System.out.println(node.element);//输出节点的值
    preOrderTraversal(node.left);
    preOrderTraversal(node.right);
}
中序遍历(Inorder Traversal)

访问顺序:中序遍历左子树——>根节点——>中序遍历右子树

中序遍历二叉搜索树的结果是有序的,一般为升序

在这里插入图片描述

代码实现

/**
* 递归实现对二叉树的中序遍历
* @param node 传入一棵树的根节点,先中序遍历一棵树的左边输出值,再输出根节点的值,最后遍历右边
*/
public void inOrderTraversal(Node<E> node) {
    if (node == null) {
    	return;
    }
    inOrderTraversal(node.left);
    System.out.println(node.element);
    inOrderTraversal(node.right);
}
后序遍历(Postorder Traversal)

访问顺序:后序遍历左子树——>后序遍历右子树——>根节点

在这里插入图片描述

代码实现

/**
* 递归实现后序遍历
* @param node 传入一颗树的根节点
* 大家可以想象这个递归过程,当我们递归到最左边的叶子节点时,左右子树都为空时会输出叶子节点值,重复如此
*/
private  void potsOrderTraversal(Node<E> node) {
    if (node == null) {
    	return;
    }
    potsOrderTraversal(node.left);
    potsOrderTraversal(node.right);
    System.out.println(node.element);
}
层序遍历(Level Order Traversal)

访问顺序:从根节点开始,一层一层向下访问。

在这里插入图片描述

代码实现

/**
* 实现树的层序遍历
*
* @param node 传入一颗树的根节点,使用队列来完成
*             1.将根节点放入队
*             2.将队头节点出队访问,将队头节点的左节点入队,再将右节点入队(将这一步循环操作,直到队列为空)
*/
public void levelOrderTraversal(Node<E> node) {
    if (node == null) {//若根节点为空直接返回
    	return;
    }
    Queue<Node<E>> queue = new LinkedList<>();
    queue.offer(node);//将根节点入队

    while (!queue.isEmpty()) {//队列不为空就一直循环
        Node<E> firstNode = queue.poll();//将队首元素出队
        System.out.println(firstNode.element);//访问

        if (firstNode.left != null) {//在队首元素出队时将其左节点入队
        	queue.offer(firstNode.left);
        }

        if (firstNode.right != null) {//在队首元素出队时将其右节点入队
        	queue.offer(firstNode.right);
        }
    }
}
  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值