C++ C+中引用的使用+;
我正在编写代码来解决“恢复二进制搜索树”问题 首先,我编写了这段代码,将三个指针从recoverTree函数中取出,如下所示:C++ C+中引用的使用+;,c++,C++,我正在编写代码来解决“恢复二进制搜索树”问题 首先,我编写了这段代码,将三个指针从recoverTree函数中取出,如下所示: class Solution { public: TreeNode *pre; TreeNode *first; TreeNode *second; void recoverTree(TreeNode *root) { inOrder(root); int temp = first->val;
class Solution {
public:
TreeNode *pre;
TreeNode *first;
TreeNode *second;
void recoverTree(TreeNode *root) {
inOrder(root);
int temp = first->val;
first->val = second->val;
second->val = temp;
return;
}
void inOrder(TreeNode *root) {
if (!root) return;
inOrder(root->left);
if (!pre) {
pre = root;
} else {
if (pre->val > root->val) {
if (!first) first = pre;
second = root;
}
pre = root;
}
inOrder(root->right);
}
};
class Solution {
public:
void recoverTree(TreeNode *root) {
TreeNode *pre;
TreeNode *first;
TreeNode *second;
inOrder(root, pre, first, second);
int temp = first->val;
first->val = second->val;
second->val = temp;
return;
}
void inOrder(TreeNode *root, TreeNode *&pre, TreeNode *&first, TreeNode *&second) {
if (!root) return;
inOrder(root->left, pre, first, second);
if (!pre) {
pre = root;
} else {
if (pre->val > root->val) {
if (!first) first = pre;
second = root;
}
pre = root;
}
inOrder(root->right, pre, first, second);
}
};
它运行良好,通过了所有测试。然后我想也许不把三个指针的定义放在函数之外。所以我写了这样的东西:
class Solution {
public:
TreeNode *pre;
TreeNode *first;
TreeNode *second;
void recoverTree(TreeNode *root) {
inOrder(root);
int temp = first->val;
first->val = second->val;
second->val = temp;
return;
}
void inOrder(TreeNode *root) {
if (!root) return;
inOrder(root->left);
if (!pre) {
pre = root;
} else {
if (pre->val > root->val) {
if (!first) first = pre;
second = root;
}
pre = root;
}
inOrder(root->right);
}
};
class Solution {
public:
void recoverTree(TreeNode *root) {
TreeNode *pre;
TreeNode *first;
TreeNode *second;
inOrder(root, pre, first, second);
int temp = first->val;
first->val = second->val;
second->val = temp;
return;
}
void inOrder(TreeNode *root, TreeNode *&pre, TreeNode *&first, TreeNode *&second) {
if (!root) return;
inOrder(root->left, pre, first, second);
if (!pre) {
pre = root;
} else {
if (pre->val > root->val) {
if (!first) first = pre;
second = root;
}
pre = root;
}
inOrder(root->right, pre, first, second);
}
};
但这不起作用。我对引用的使用有什么问题吗?还是其他导致错误的原因?看到指向指针的引用有点不寻常,看到有人试图指向引用更奇怪。你想在这里干什么?还值得标记任何未作为
const
操作的参数。您确定需要对指针的引用,还是只需要对节点的引用?同时使用*
和&
与仅使用TreeNode&
是完全不同的。