遍历二叉树(学习笔记)

遍历二叉树


遍历二叉树有4种方法,分别是 先序中序后序层次,前3种方法其实本质上是一样的, 在这里插入图片描述
我们要先了解前3种遍历过程是怎么样的,先遍历根节点再遍历左子树,再遍历左子树的左子树,直到他的左子树为空,例如A,B,D,H。直到他的左子树为空,再遍历他的右子树,若不为空,则按照上述方法继续遍历,若为空则退回上一个结点,遍历他的右子树,然后一直重复这个过程。例ABDHHHDIIIDBEJJJEEBACFFFCGGGCA这是他的所有遍历过程,会发现每个结点出现3次,先序排序就是在他第一次出现的时候就打印,中序是第二次,后序是第三次。
先序:ABDHIEJCFG
中序:HDIBJEAFCG(还可以看他水平画下来之后从左到右的排序)
后序:HIDJEBFGCA
代码实现分别是

void PreOrderTraverse(BinaryTree*T)
{
	if (T == NULL)return;
	cout << T->data;
	PreOrderTraverse(T->lchild);//遍历左子树
	PreOrderTraverse(T->rchild);//遍历右子树

}
void InOrderTraverse(BinaryTree*T)
{
	if (T == NULL)return;
	
	InOrderTraverse(T->lchild); 
	cout << T->data;
	InOrderTraverse(T->rchild); 
}
void PostOrderTraverse(BinaryTree*T)
{
	if (T == NULL)return;
	PostOrderTraverse(T->lchild);   
	PostOrderTraverse(T->rchild);   
	cout << T->data;
}

在这里插入图片描述

而层序逻辑就更简单了,就是ABCDEFGHIJ一层一层走,从左到右。
而代码则是通过队列来实现。

void LayerOrderTraverse(BinaryTree* T)
{

	queue <BinaryTree*>a;
	a.push(T);
	while (!a.empty())
	{
		
		cout << T->data;
		if (T->lchild != NULL)a.push(T->lchild);//有左子树则进队
		if (T->lchild != NULL)a.push(T->lchild);//有右子树则进队
		a.pop();//出队第一个结点
	}
	
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值