找不到合适的头衔,请原谅我, 反正
我试图分析BST的递归函数,它返回1。
在计算错误之后,我得到的返回值为0,我想知道我在这里做错了什么。
我们从main.c
:func_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));
}
}
我的计算: func(5,9) - > func3(3,4) - > func(1,1) - >返回subTree = sum = 0。
答案 0 :(得分:1)
如果存在一个路径(1
到root 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
(前一个呼叫节点的左子节点)
但是,此时node
为NULL
,并且sum == 0
为真,它将返回1
,并且此返回值将一直返回到递归和最后到main
。