代码:
//is leaf?
if (root->left == root->right == NULL)
{
cout << "\n is leaf";
cout << ", l: " << root->left << ", r: " << root->right;
return; //is leaf
}
返回:
is leaf, l: 004EDCD8, r: 004EDC70
这不是预期的行为。它们显然不相等且不为空,那么为什么这个陈述会返回真实?
如何比较指针值?
答案 0 :(得分:4)
没有三路==
运营商。这就像你说的那样:
if ((root->left == root->right) == NULL)
自root->left != root->right
以来,该部分将为假(0
)。现在我们有:
if (0 == NULL)
将评估为真。
你想说的是:
if ((root->left == NULL) && (root->right == NULL))
答案 1 :(得分:3)
表达式
(root->left == root->right == NULL)
相当于
( (root->left == root->right) == NULL)
您正在寻找的是:
(root->left == NULL && root->right == NULL)
答案 2 :(得分:1)
//is leaf?
if (root->left == NULL && root->right == NULL)
{
cout << "\n is leaf";
cout << ", l: " << root->left << ", r: " << root->right;
return; //is leaf
}
答案 3 :(得分:1)
if (root->left == root->right == NULL)
这句话的目的是什么?
我不是100%确定运算符优先级,而是进行比较,这会产生布尔结果,然后将布尔结果与其他结果进行比较。
无论哪种方式,这都是一个可怕的陈述。但很明显,这会导致错误的结果。你需要解决这个问题。
答案 4 :(得分:0)
(root-&gt; left == NULL&amp;&amp; root-&gt; right == NULL)
应该解决问题。