黑笔部分代码不是用来求二叉树的高度吗,怎么又能算二叉树的结点个数了,求解答
黑色部分是比较常用的二叉树遍历,无论计算高度,还是求节点个数,都需要遍历二叉树不是吗?而求高度会取节点数的最大值,而求节点数是直接求和
黑笔部分代码不是用来求二叉树的高度吗?
解答:黑色部分的代码真不是求高度的,而是求结点个数的代码
传入跟节点,算改树的节点个数
使用的是递归的方法
高度的算法不是这样的。
一棵以某个结点为根的子树(当然是二叉树啦)
它的结点数为左子树结点数+右子树结点数+1(想一想, 为什么? 如下图所示, 以C为根的结点数不就等于以A为根的结点数+以D为根的结点数+1(C本身))
所以要递归到左子树和右子树去求(你不知道所以才要求呀)
如果每次都判断左右子树是否为空会很麻烦, 所以是递归到左/右子树后才判断当前结点是否为空, 否则继续往子结点递归
黑色部分只是一个递归,求高度的话要将返回值那里改成判断n1和n2的大小,然后返回n1+1或n2+1,这个的返回值就是求结点个数的。并且前面还要加上叶子结点的判断条件,是的话返回1,否则返回0。