项目场景:
之前老师让写了一个关于链式二叉树TreeSize的函数, 如何求呢?
问题描述
我的想法是这样的, 我们二叉树要看为三部分, 即根, 左子树和右子树. 所以对于任何一棵树来说, 他的结点的个数 = 自己 + 左子树结点个数 + 右子树结点个数.
我一不小心就写出了下面代码.
int Tree_Size(TreeNode* node, int size)
{
if (node == NULL)
{
return 0;
}
size += Tree_Size(node->left, size);//加上左子树结点的个数
size += Tree_Size(node->right, size);//加上右子树结点的个数
return size + 1;
}
一个有六个结点的树, 求出他的结点个数竟然是15! 这是什么情况?
原因分析:
提示:这里填写问题的分析:
我们简单分析一下上图, 这是因为我们传入size, 左子树的结点会加两遍.
解决方案:
提示:这里填写该问题的具体解决方案:
修改代码如下:
EOF