Pointers 编写一个给定二叉树的布尔函数,如果该树有偶数个节点,则返回true
Q:编写一个给定二叉树的布尔函数,当且仅当 树的节点数为偶数。空树被认为具有偶数个节点 注意事项: 函数应该只有一个参数,一个指向根的指针 不能使用全局变量Pointers 编写一个给定二叉树的布尔函数,如果该树有偶数个节点,则返回true,pointers,data-structures,tree,binary-tree,nodes,Pointers,Data Structures,Tree,Binary Tree,Nodes,Q:编写一个给定二叉树的布尔函数,当且仅当 树的节点数为偶数。空树被认为具有偶数个节点 注意事项: 函数应该只有一个参数,一个指向根的指针 不能使用全局变量 不得定义其他功能。您可能无法计算节点的数量以下假设由单个节点组成的树是奇数。也就是说,如果树仅由根节点组成,则该树的节点数为奇数。在你的描述中,“空树”是什么意思还不清楚。我认为它的意思是“空根” 即使一个节点的子节点组合起来有奇数个节点,也可以将其视为节点。是的,奇怪。因为您必须计算节点本身。考虑简单的二叉树: 1 2 3 结合
不得定义其他功能。您可能无法计算节点的数量以下假设由单个节点组成的树是奇数。也就是说,如果树仅由根节点组成,则该树的节点数为奇数。在你的描述中,“空树”是什么意思还不清楚。我认为它的意思是“空根” 即使一个节点的子节点组合起来有奇数个节点,也可以将其视为节点。是的,奇怪。因为您必须计算节点本身。考虑简单的二叉树:
1
2 3
结合起来,节点的子节点具有偶数个节点。但是您也必须计算根节点
因此,一个子节点必须有偶数个节点,另一个子节点必须有奇数个节点
考虑一棵更大的树:
1
2 3
4 5 6
7
节点4是偶数。节点5是奇数。节点2是偶数。节点6是奇数。节点3是偶数。节点1是奇数,因为两个子节点都是偶数
真值表,假设偶数=真,奇数=假:
left right result
false false false
false true true
true false true
true true false
所以如果两者都是真的或都是假的,那么它就是假的。如果其中一个为真,则结果为真。这是一个排他性or
这应该是递归的。让我们试试上面这棵树
- 7没有节点,因此结果是奇数
- 4具有奇数左节点和偶数右节点(空节点被视为偶数)。4是偶数
- 5没有节点,所以很奇怪
- 2是偶数,因为4是偶数,5是奇数
- 6是奇怪的,因为它没有孩子
- 3是偶数,因为左边是偶数,右边是奇数
- 1是奇数,因为它的左右节点(2和3)都是偶数
根据该描述,您应该能够编写递归函数。感谢您的解释。您可以在一行中编写:
return!p | |(IsEven(p->左)^IsEven(p->右))代码>你能解释一下吗,(IsEven(p->left)^IsEven(p->right))?我不确定它到底是做什么的,这是一个很好的例子。如果两个操作数均为真或两个操作数均为假,则结果为假。仅当一个操作数为真,另一个为假时,结果才为真。在我的回答中,我展示了真相表。非常感谢。@JimMischel你能帮我解决这个问题吗。
Bool isEven(treepr *p)
{
if(p)
{
if(isEven(p->left) == isEven(p->right))
return false;
else
return true;
}
return true;
}