Recursion 递归函数的返回值

Recursion 递归函数的返回值,recursion,Recursion,在下面的代码中,我试图更好地理解递归实际上是如何工作的。我一直对它的实际工作有点困惑。我想知道inoorder()函数在每一步中实际返回的值。从哪里分别得到这些值0,0,11,0,0,11,12,0,0,11。有人能告诉我逻辑吗?这是一个基本的顺序树遍历程序。我之所以试图理解这些输出,是因为在某种程度上使用了相同的逻辑来查找树的深度(我认为),其中每次递归时,深度值都会增加,而无需初始化 #include<stdio.h> #include<stdlib.h> stru

在下面的代码中,我试图更好地理解递归实际上是如何工作的。我一直对它的实际工作有点困惑。我想知道inoorder()函数在每一步中实际返回的值。从哪里分别得到这些值0,0,11,0,0,11,12,0,0,11。有人能告诉我逻辑吗?这是一个基本的顺序树遍历程序。我之所以试图理解这些输出,是因为在某种程度上使用了相同的逻辑来查找树的深度(我认为),其中每次递归时,深度值都会增加,而无需初始化

#include<stdio.h>
#include<stdlib.h>

struct node
{
    int data;
    struct node *left;
    struct node *right;
};

struct node* newNode(int data)
{
    struct node* node=(struct node*)malloc(sizeof(struct node));
    node->data=data;
    node->left=NULL;
    node->right=NULL;
    return node;
}

int inorder(struct node *temp) {
   if (temp != NULL) {
    printf("\nleft  %d\n",inorder(temp->left));
    printf("\n%d\n", temp->data);
    printf("\nright   %d\n",inorder(temp->right));
   }
}

int main()
{
    struct node *root=newNode(1);

    root->left=newNode(2);

    root->right=newNode(3);

    root->left->left=newNode(4);

    root->left->right=newNode(5);


    inorder(root);
    getchar();
    return 0;
}
#包括
#包括
结构节点
{
int数据;
结构节点*左;
结构节点*右;
};
结构节点*新节点(整型数据)
{
结构节点*节点=(结构节点*)malloc(sizeof(结构节点));
节点->数据=数据;
节点->左=空;
节点->右=空;
返回节点;
}
int顺序(结构节点*temp){
如果(温度!=NULL){
printf(“\n左%d\n”,按顺序(临时->左));
printf(“\n%d\n”,临时->数据);
printf(“\n右%d\n”,按顺序(临时->右));
}
}
int main()
{
结构节点*root=newNode(1);
根->左=新节点(2);
根->右=新节点(3);
根->左->左=新节点(4);
根->左->右=新节点(5);
顺序(根);
getchar();
返回0;
}

此功能应更改为以下内容(原始代码中的第一次和最后一次打印只会让您更加困惑!):

递归从特定节点的左分支(通常是“根”)开始—递归(按顺序)打印该左分支上的所有节点,然后打印当前节点,然后递归(按顺序)打印右分支中的所有节点

顺便说一句,如果要使该树保持“有序”(即左分支上的所有节点都小于该节点,右分支上的所有节点都大于或等于该节点),则应更改:

root->left->left=newNode(4);
root->left->right=newNode(5);
致:


@SumitCornelius Stackoverflow不是这样工作的:在你得到答案之后,你不应该把一个现有的问题完全修改成另一个问题。如果你有另一个问题,你应该把它作为一个新问题发布(即使它与前一个相关)。祝你好运
root->left->left=newNode(4);
root->left->right=newNode(5);
root->right->right=newNode(4);
root->right->right->right=newNode(5);