这个二叉树算法的条件语句如何工作?

时间:2015-02-03 17:42:45

标签: c algorithm

我正在研究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

5 个答案:

答案 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

如果tempNULL,则会达到0,其结果为{{1}}。

答案 2 :(得分:1)

只要条件语句(在您的情况下为if)不等于零,就会执行temp块。在C中,NULL指针的数值为零。因此,如果tempNULL,则if块将不会被执行。

答案 3 :(得分:1)

在C99之前的C中,没有特别指定的布尔类型。 标量类型仍然可以替代使用,例如int或类似指针,Node*。零值相当于false,非零值相当于true

因此,在您的示例中,指针tempif语句中的条件。这意味着,如果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;
}

您不应该遵循您为代码可读性而显示的结构。