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