C语言求二叉树结点个数?

图片说明

黑笔部分代码不是用来求二叉树的高度吗,怎么又能算二叉树的结点个数了,求解答

黑色部分是比较常用的二叉树遍历,无论计算高度,还是求节点个数,都需要遍历二叉树不是吗?而求高度会取节点数的最大值,而求节点数是直接求和

黑笔部分代码不是用来求二叉树的高度吗?

解答:黑色部分的代码真不是求高度的,而是求结点个数的代码
传入跟节点,算改树的节点个数

使用的是递归的方法

高度的算法不是这样的。

一棵以某个结点为根的子树(当然是二叉树啦)

它的结点数为左子树结点数+右子树结点数+1(想一想, 为什么? 如下图所示, 以C为根的结点数不就等于以A为根的结点数+以D为根的结点数+1(C本身))

所以要递归到左子树和右子树去求(你不知道所以才要求呀)

如果每次都判断左右子树是否为空会很麻烦, 所以是递归到左/右子树后才判断当前结点是否为空, 否则继续往子结点递归

黑色部分只是一个递归,求高度的话要将返回值那里改成判断n1和n2的大小,然后返回n1+1或n2+1,这个的返回值就是求结点个数的。并且前面还要加上叶子结点的判断条件,是的话返回1,否则返回0。