我正在研究Build the binary search tree from inorder and preorder traversals提出的算法的实现。
我认为实现是用c ++编写的,我对这一行Node * temp = (Node *)malloc(sizeof(Node));
有一个问题,并对其后面的if
条件进行了评估,如下所示:
Node * temp = (Node *)malloc(sizeof(Node));
if(temp){
//do some stuff
//conditionally return a Node
}
return NULL
节点可能是二叉树节点。它的实现没有显示,但if(temp)
条件是如何工作的,以至于到达了最后return NULL
?
答案 0 :(得分:2)
if(temp)
表示if (temp!=NULL)
,这实际上意味着如果Node * temp已成功malloc并从malloc返回,则输入if
代码块。除非有代码返回if
块中的某些内容(然后退出程序),否则将执行return NULL
语句。
答案 1 :(得分:1)
if
中的条件如果评估为0
,则视为 false ,如果评估为非{0>,则视为 true
if(temp)
条件是如何工作的,以便最后达到return NULL
?
如果temp
为NULL
,则会达到0
,其结果为{{1}}。
答案 2 :(得分:1)
只要条件语句(在您的情况下为if
)不等于零,就会执行temp
块。在C中,NULL
指针的数值为零。因此,如果temp
为NULL
,则if
块将不会被执行。
答案 3 :(得分:1)
在C99之前的C中,没有特别指定的布尔类型。 标量类型仍然可以替代使用,例如int
或类似指针,Node*
。零值相当于false
,非零值相当于true
。
因此,在您的示例中,指针temp
是if
语句中的条件。这意味着,如果if
的值为temp
,则true
中的代码将会执行,即不等于零(NULL
)。
答案 4 :(得分:0)
实际上代码结构应该是,
Node * temp = (Node *)malloc(sizeof(Node));
if( temp != NULL ){
//do some stuff
//conditionally return a Node
}
else
{
return NULL;
}
您不应该遵循您为代码可读性而显示的结构。