我对以下代码感到困惑,并尝试理解它们的含义。
if( (root->left == NULL) || (root->right == NULL) )
{
Node *temp = root->left ? root->left : root->right;
}
表示if root->left ==NULL
然后temp = root->left
? else temp = root->right
?
答案 0 :(得分:5)
你不完全正确,但你明白了。这是一个条件运算符,它接受三个操作数。
var = condition ? expression1 : expression2
相当于
if( condition )
var = expression1
else
var = expression2
在你的情况下,它意味着
如果root-> left!= NULL则temp = root-> left,否则temp = root-> right
而不是
如果root-> left == NULL则temp = root-> left,否则temp = root-> right
答案 1 :(得分:1)
表示以下内容:如果left
和right
为NULL
,则temp
等于NULL
,否则left
为{{} 1}},然后NULL
等于temp
,否则如果right
为right
,则NULL
等于temp
。
答案 2 :(得分:1)
你错了。这意味着root->left == NULL
然后是*temp = root->right
,
否则root->right == NULL
然后*temp = root->left
,
其他*temp
将不会被设置。
有4种可能的情况:
root->left == NULL
和root->right != NULL
,*temp
将为root->right
。root->left == NULL
和root->right == NULL
,*temp
将为root->right
。root->left != NULL
和root->right != NULL
,*temp
将不会设置。root->left != NULL
和root->right == NULL
,*temp
将为root->left
。现在你可以看到第二和第三种情况可能是潜在的问题。