Pointers 编写一个给定二叉树的布尔函数,如果该树有偶数个节点,则返回true

Pointers 编写一个给定二叉树的布尔函数,如果该树有偶数个节点,则返回true,pointers,data-structures,tree,binary-tree,nodes,Pointers,Data Structures,Tree,Binary Tree,Nodes,Q:编写一个给定二叉树的布尔函数,当且仅当 树的节点数为偶数。空树被认为具有偶数个节点 注意事项: 函数应该只有一个参数,一个指向根的指针 不能使用全局变量 不得定义其他功能。您可能无法计算节点的数量以下假设由单个节点组成的树是奇数。也就是说,如果树仅由根节点组成,则该树的节点数为奇数。在你的描述中,“空树”是什么意思还不清楚。我认为它的意思是“空根” 即使一个节点的子节点组合起来有奇数个节点,也可以将其视为节点。是的,奇怪。因为您必须计算节点本身。考虑简单的二叉树: 1 2 3 结合

Q:编写一个给定二叉树的布尔函数,当且仅当 树的节点数为偶数。空树被认为具有偶数个节点

注意事项:

函数应该只有一个参数,一个指向根的指针

不能使用全局变量


不得定义其他功能。您可能无法计算节点的数量

以下假设由单个节点组成的树是奇数。也就是说,如果树仅由根节点组成,则该树的节点数为奇数。在你的描述中,“空树”是什么意思还不清楚。我认为它的意思是“空根”

即使一个节点的子节点组合起来有奇数个节点,也可以将其视为节点。是的,奇怪。因为您必须计算节点本身。考虑简单的二叉树:

  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;
}