这个功能是如何工作的? (BST 递归)

How does this function work? (BST recursion)

没有找到合适的标题,请见谅, 反正

我正在尝试分析 BST 的递归函数,returns 1.

经过我的错误计算,我得到 return 值为 0,我想知道我在这里做错了什么。

我们从 main.c 调用函数:func_3(root, 9);

所以总和=9

这是代码块:

int func_3(struct node* node, int sum)
 {
        if (node == NULL) 
              return(sum == 0);
        else 
        {
            int subSum = sum - node->data;
            return (func_3(node->left, subSum) ||  func_3(node->right, subSum));

         }
 }

这是 BST:

我的计算: func(5,9) -> func3(3,4) -> func(1,1) -> returns subTree = sum = 0.

此函数 returns 1 如果有一条路径(root nodeleaf node),其值的总和等于 sum

在 main 中的函数调用 func_3(root, 9) 中,您试图做的是检查二叉树中是否有任何路径,以便该路径中所有节点的值之和相等到 9。

有这样一条路径,就是最左边的路径(5->3->1),所以你的函数会return 1.

这是 returning 1. 第一次调用是

func_3(node, 9)

其中 node 指向此树的根节点,即值为 5.

的根节点

此处节点不为空。所以,

subSum = 9 - 5 = 4.

下一个电话是

func3(node, 4)

其中 node 指向值为 3 的节点(上次调用节点的左子节点)

这里再次节点不为空,所以,

subSum = 4 - 3 = 1

下一个电话是

func3(node, 1)

其中 node 指向值为 1 的节点(上次调用节点的左子节点)

这里再次节点不为空,所以,

subSum = 1 - 1 = 0

下一个电话是

func_3(node, 0)

其中 node 指向 NULL(上次调用节点的左子节点)

不过这次nodeNULL,既然sum == 0是真的,那么就会return1,而这个return值在递归中一直 returned,最后到达 main.