这个功能如何运作? (BST递归)

时间:2016-07-06 14:54:24

标签: c recursion tree binary-search-tree

找不到合适的头衔,请原谅我, 反正

我试图分析BST的递归函数,它返回1。

在计算错误之后,我得到的返回值为0,我想知道我在这里做错了什么。

我们从main.cfunc_3(root, 9);

调用这样的函数

所以 sum = 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: enter image description here

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

1 个答案:

答案 0 :(得分:1)

如果存在一个路径(1root node)且值的总和等于leaf node,则此函数返回sum

在main函数调用func_3(root, 9)中,您要检查的是检查二叉树中是否存在任何路径,以使该路径中所有节点的值总和等于9 。

有这样的路径,这是最左边的路径(5-> 3-> 1),所以你的函数将返回1.

这是它返回的方式1.首先是

func_3(node, 9)

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

此节点不为空。所以,

subSum = 9 - 5 = 4.

下一个电话是

func3(node, 4)

其中node指向值为3的节点(前一个调用的节点的左子节点)

这里,节点不是null,所以,

subSum = 4 - 3 = 1

下一个电话是

func3(node, 1)

其中node指向值为1的节点(前一个调用的节点的左子节点)

这里,节点不是null,所以,

subSum = 1 - 1 = 0

下一个电话是

func_3(node, 0)

其中node指向NULL(前一个呼叫节点的左子节点)

但是,此时nodeNULL,并且sum == 0为真,它将返回1,并且此返回值将一直返回到递归和最后到main