二叉树遍历之递归遍历

前文 二叉树的实现 简单讲解了基本概念,创建一颗树的过程

遍历整棵树最常用的还是递归遍历,代码实现容易

遍历顺序:

        谈及遍历,通常为操作该节点,比如打印节点值;而经过并不是遍历的意思

        前序遍历:根,左,右

        中序遍历:左,根,右

        后序遍历:左,右,根

       

实现原理:

        以前序遍历为例,顺序为:根,左,右

        1. 根节点入栈

        2. 开启循环,每次出栈一元素,打印其值;

           如果有子节点,要先入栈右子节点,再入栈左子节点。这样出栈顺序才能保证是先左,后右

      

图示说明:

1. 根节点入栈,然后出栈

2. 右子节点,左子节点都存在,分别入栈,然后出栈左子节点

3. 左子节点,其存有左子节点,入栈,再出栈

4. 没有后续子节点,继续出栈节点 3

5. 同理后续情况

代码实现:

依据图示说明,遇见根节点就打印,然后递归左节点,递归右节点

void preorder(struct TreeNode* root)
{
	if(root == NULL)
		return;
	
	printf("val=%d\n",root->val);
	preorder(root->left);
	preorder(root->right);
}

 中序遍历,后序遍历雷同,代码如下:

void inorder(struct TreeNode* root)
{
	if(root == NULL)
		return;
	
	inorder(root->left);
	printf("val=%d\n",root->val);
	inorder(root->right);
}
void postorder(struct TreeNode* root)
{
	if(root == NULL)
		return;
	
	postorder(root->left);
	postorder(root->right);
	printf("val=%d\n",root->val);
}

小结:

递归遍历是非常常用的手法来实现访问树的所有节点

我们也知道递归与迭代是可以互相转换的,后续章节我们会继续用迭代的方式来实现 前、中、后序遍历 

二叉树遍历之迭代遍历

 更多数据结构详解

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值