问:编写一个给定二叉树的布尔函数,当且仅当时,才返回true 树具有偶数个节点。空树被认为具有偶数个节点。
备注:
该函数应该只有一个参数,一个指向根的指针。
不能使用全局变量。
无法定义其他功能。您可能不计算节点数
答案 0 :(得分:0)
以下假设由单个节点组成的树是奇数。也就是说,如果您的树仅由根节点组成,则该树具有奇数个节点。目前还不清楚你的描述中“空树”是什么意思。我认为它意味着“无效的根”。
即使节点组合,其子节点具有奇数个节点,也可以考虑节点。是的,很奇怪。因为你必须统计节点本身。考虑一下简单的二叉树:
1
2 3
组合后,节点的子节点具有偶数个节点。但是你也必须计算根节点。
因此,一个孩子必须拥有偶数个节点,而另一个孩子必须拥有奇数个节点。
考虑一棵更大的树:
1
2 3
4 5 6
7
节点4是偶数。节点5是奇数。节点2是偶数。节点6是奇数。节点3是偶数。节点1是奇数,因为两个孩子都是偶数。
真值表,假设even = true且odd = false:
left right result
false false false
false true true
true false true
true true false
因此如果两者都是真的或两者都是假的,那么它就是假的。如果任何一个为真,则结果为真。这是一个独家或。
这应该递归地工作。让我们试试上面的树。
您应该能够根据描述编写递归函数。
答案 1 :(得分:0)
Bool isEven(treepr *p)
{
if(p)
{
if(isEven(p->left) == isEven(p->right))
return false;
else
return true;
}
return true;
}