树的遍历总结

本文总结一下树的几种遍历方法,分别是前序,前序非递归,中序,中序非递归,后序,后序非递归,按层次遍历,这7种。

前序遍历

先打印当前节点,再用前序遍历的方法遍历左右子树。

前序遍历非递归

遍历到当前节点,如果非空,打印这个节点,将其入栈,指向其左子节点,否则,出栈一个元素(这个元素的左子树遍历完毕),指向其右子节点。

中序遍历

用中序遍历的方法遍历左子树,打印当前节点,用中序遍历的方法遍历右子数。

中序遍历非递归

遍历到当前节点,如果非空,将其入栈,指向其左子节点,否则,出栈一个元素(这个元素的左子树遍历完毕),打印它,指向其右子节点。

后序遍历

用后序遍历的方法遍历左右子树,打印当前节点。

后序遍历非递归

用p指向栈顶结点,用last指向上一个打印的节点,满足下面的两个条件之一,p出栈,打印p并且更新last。条件1:p的左右节点都为空,条件2:last为p的左子节点或右子节点。否则,将p的右子节点入栈(如果不空),将p的左子节点入栈(如果不空)。注意,这里先右后左,因为栈后进先出。

按层遍历

使用队列,先将根节点入队(如果根节点不空),然后从队列中取出一个元素,将左子节点(不为空)入队,将右子节点(不为空)入队,依次类推,队列为空,遍历完毕。如果要按层打印的话,队列当前的元素个数就是本层的元素个数,举例,第一层元素个数为1,队列此时元素个数也为1。因为当一层遍历完之后,其实队列中剩下的元素也就是下一层的元素。

最后,上一下代码:

import java.util.*;

class TreeNode {
   
	TreeNode left;
	TreeNode right;
	int val;

	TreeNode(int val) {
   
		this.val = val;
	}
}

public class Tree {
   
	public static void main(String[] args) {
   
		TreeNode node1 = new TreeNode(5);
		TreeNode node2 = new TreeNode(3);
		TreeNode node3 = new TreeNode(2);
		TreeNode node4 = new TreeNode(9);
		TreeNode node5 = new TreeNode(4);
		TreeNode node6 = new TreeNode(6);
		TreeNode node7 = new TreeNode(8);
		TreeNode node8 = new TreeNode(7);
		node1.left = node2;
		node1.right = node3;
		node2.right = node4;
		node3.left = node5;
		node3.right = node6;
		node5.right = node7
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值