【二叉树】二叉树的三种基本遍历方式以及递归序

二叉树的三种基本遍历方式

二叉树在数据结构中非常重要,它的基本构成就是一个节点有自己的数据,同时还有两个指向另外节点的地址,这样的节点构成的树状结构
在这里插入图片描述

这里是我画的原图链接

先序

每一颗树打印都是先头再左再右
在这里插入图片描述

先序:每一颗树打印都是先头再左再右  
示例:1245367  
解释:
	1这棵树,先打印自己1,再打印左2,再打印右3123            
	2这棵树,先打印自己2,再打印左4,再打印右5245            
	3这颗树,先打印自己3,再打印左6,再打印右7367            
	4567这些树,下面都是null,只打印自己;            
所以,打印整棵树就是,把2打印出来的放在1这棵树的打印2的位置:12453            
然后,再把3打印出来的放在1这棵树的打印3的位置:1245367            
得到最终结果

中序

每一棵树打印都是先左再头再右
在这里插入图片描述

中序:每一颗树打印都是先左再头再右  
示例:4251637  
解释:
	1这棵树,先打印左2,再打印自己1,再打印右3213            
	2这棵树,先打印左4,再打印自己2,再打印右5425            
	3这颗树,先打印左6,再打印自己3,再打印右7637            
	4567这些树,下面都是null,只打印自己;            
所以,打印整棵树就是,把2打印出来的放在1这棵树的打印2的位置:42513            
然后,再把3打印出来的放在1这棵树的打印3的位置:4251637            
得到最终结果

后序

每一棵树都是先左再右再头
在这里插入图片描述

后序:每一颗树打印都是先左再右再头  
示例:4526731  
解释:
	1这棵树,先打印左2,再打印右3,再打印自己1231            
	2这棵树,先打印左4,再打印右5,再打印自己2452            
	3这颗树,先打印左6,再打印右7,再打印自己3673            
	4567这些树,下面都是null,只打印自己;            
所以,打印整棵树就是,把2打印出来的放在1这棵树的打印2的位置:45231            
然后,再把3打印出来的放在1这棵树的打印3的位置:4526731            
得到最终结果

这是我画的原图链接

实现

  1. 先实现每一个节点的先序、中序、后序。
  2. 递归每个节点。
	/**
	 * 先序
	 * @param head
	 */
	public static void preorder(Node head) {
		if (head == null) {
			return;
		}
		System.out.print(head.value+" ");//先头
		preorder(head.left);//再左
		preorder(head.right);//再右
	}

	/**
	 * 中序
	 * @param head
	 */
	public static void ims(Node head) {
		if (head == null) {
			return;
		}
		ims(head.left);//先左
		System.out.print(head.value+" ");//再头
		ims(head.right);//再右
	}

	/**
	 * 后序
	 * @param head
	 */
	public static void posorder(Node head) {
		if (head == null) {
			return;
		}
		posorder(head.left);//先左
		posorder(head.right);//再右
		System.out.print(head.value+" ");//再自己
	}

测试代码:

	public static void main(String[] args) {
		Node head = new Node(1);
		head.left = new Node(2);
		head.right = new Node(3);
		head.left.left = new Node(4);
		head.left.right = new Node(5);
		head.right.left = new Node(6);
		head.right.right = new Node(7);
		preorder(head);
		System.out.println();
		System.out.println("========");
		ims(head);
		System.out.println();
		System.out.println("========");
		posorder(head);
		System.out.println();
		System.out.println("========");
	}

测试结果:

1 2 4 5 3 6 7 
========
4 2 5 1 6 3 7 
========
4 5 2 6 7 3 1 
========

进阶

通过上面的代码,我们可以找到规律,就有了递归序。

递归序

每一个节点都进入了3次,
在第一次来到节点打印,就实现了先序
在第二次来到节点打印,就实现了中序
在第三次来到节点打印,就实现了后序

在这里插入图片描述

这里是我画的原图链接

   public static void recursiveOrder(Node head) {
		if (head == null) {
			return;
		}
		// 第一次来到本节点
		recursiveOrder(head.left);
		// 第二次来到本节点
		recursiveOrder(head.right);
		// 第三次来到本节点
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泪梦殇雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值