我正在阅读以下文章。 Add greater values of every node
所以我对函数void modifyBSTUtil(struct node *root, int *sum)
返回,为什么它所做的更改会在树中持续存在。
1.我们没有使用双指针
2.Nor是根本全球
3.我们没有返回地址
任何人都可以解释为什么会这样吗?
代码
void modifyBSTUtil(struct node *root, int *sum)
{
// Base Case
if (root == NULL) return;
// Recur for right subtree
modifyBSTUtil(root->right, sum);
// Now *sum has sum of nodes in right subtree, add
// root->data to sum and update root->data
*sum = *sum + root->data;
root->data = *sum;
// Recur for left subtree
modifyBSTUtil(root->left, sum);
}
致电:modifyBSTUtil(root,& sum)
插入功能
struct node* insert(struct node* node, int data)
{
/* If the tree is empty, return a new node */
if (node == NULL) return newNode(data);
/* Otherwise, recur down the tree */
if (data <= node->data)
node->left = insert(node->left, data);
else
node->right = insert(node->right, data);
/* return the (unchanged) node pointer */
return node;
}
我们需要在插入函数的情况下返回地址以使更改永久化,为什么不返回?
答案 0 :(得分:3)
这是有效的,因为在此示例中,节点之间的链接不会更改。只保存它们存储的值(->data
)。
答案 1 :(得分:0)
在函数中没有任何神圣的东西阻止对外界产生持久影响,唯一的限制是它接收的参数可能会限制它可能访问的数据。
在这种情况下,它获取一个指向节点的指针,并使用它来访问节点并在那里更改数据。它不会改变指针本身,因为它是由值给出的(即 - 指针值被复制,因此更改它将不会在外部可见),但指针值足以访问该节点的内存并更改存储的值那里。 请注意,访问节点本身可以允许您更改那里的指针,因此在以下节点的任何地方更改树结构。