【发布时间】:2020-10-17 15:18:03
【问题描述】:
我已将节点指针初始化为 nullptr,并将其作为引用传递给辅助函数。在辅助函数内部,我将之前为 nullptr 的指针设置为等于 new Pointer。但是,函数结束后,又被设置为nullptr。
void helper(vector<int>& nums, int start, int end, TreeNode* root){
if(start >= end) return;
root = new TreeNode;
int median = (start + end) / 2;
root -> val = nums[median];
helper(nums, start, median - 1, root -> left);
helper(nums, median + 1, end, root -> right);
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root = nullptr;
helper(nums, 0, nums.size() - 1, root);
return root;
}
【问题讨论】:
-
root = new TreeNode;对这个函数的调用者没有任何意义。指针只是一个标量(尽管在使用上很特殊)。如果参数是int val并且你在函数中做了val = 42;,你会期望调用者的变量被修改吗?不,你不会,因为调用者参考没有提供val。指针也不例外。要么通过引用传递指针,要么利用其他未使用的返回类型将生成的根值传回给调用者。 -
关于另一个主题
(start + end) / 2可能会溢出
标签: c++ pointers recursion tree nodes