二叉树递归遍历结点个数

这里先直接按照上一篇博客单链表的递归套路写下来。

int count(BiTree root){
	if (root == NULL){
		return 0;
	}
	int l_count = conut (root->lchild);
	int r_count = count (root->rchild);
	return l_count + r_count + 1;
}

其实,单链表是“一叉树”,遍历的时候只有写一个递归句子就好了,二叉树相当于向左遍历一次,向右遍历一次。
难想的是,为什么二叉树写两个递归就可以表示所有节点个数了呢?

  • 只看左子树那条边时,就是单链表的套路,加上右子树时,每条左子树执行完时,会把当前结点的右边算上,右边一样是单链表的套路。
  • 左边执行到底,然后执行左边的右边。
  • …这些解释很难理解

这样抽象的东西要想理解,可以画图,也可以和具体的含义联系起来。

递归就是往后走嘛,上面的代码两条递归,就是向两边递归,至于递归先后,可以没有先后,因为是两条路,总是一条走完走另一条,我们放眼全局的话,就是两条路一起走。
也就是说,递归完成的就是向后走,然后依次返回的功能,没到return之前都是走的过程,经过return就是返回的过程。
那么上面的代码就理解为:如果走到空了,返回的时候就是0,如果不是空,就返回左子树和右子树节点数加1(1是根节点)。每次向上都是这样,直到root。

可以把递归理解为一个功能count(BiTree root)是计算root树的节点数。它是计算左边conut (root->lchild)和右边count (root->rchild)树个数+1。结束。
不要多想。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值