树问题中的递归函数

时间:2018-07-08 03:43:40

标签: c recursion binary-tree

我具有将二叉树转换为链接列表的功能。由于flatten_helper函数返回void,因此我无法理解递归的工作原理。那么,当递归函数返回void时,实际发生了什么?有人可以帮助我了解此处代码中发生的情况吗?

此外,由于我正在努力了解这些类型的问题,因此非常感谢理解树问题中的递归的任何链接。

void flatten_helper(struct TreeNode* root, struct TreeNode** prev)
{
    if (root == NULL) return;
    flatten_helper(root->right, prev);
    flatten_helper(root->left,  prev);    
    root->right = *prev;
    root->left = NULL;
    *prev = root;    
}
void flatten(struct TreeNode* root)
{
    struct TreeNode **prev; 
    prev = (struct TreeNode *)malloc(sizeof(struct TreeNode *));   
    *prev = NULL;
    flatten_helper(root, prev); 
    *prev = NULL;
    free(prev);
 }

代码积分-Leetcode

1 个答案:

答案 0 :(得分:1)

不要将flatten_helper()视为函数,而应将其视为过程。它不返回值,实际上可以完成一些工作(将root-> right设置为* prev,将root-> left设置为NULL,并将* prev设置为root)。