x*****0 发帖数: 452 | 1 class Solution {
private:
TreeNode *pre;
public:
Solution() : pre(NULL) {}
void flatten(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
//static TreeNode* pre = NULL;
if (root != NULL) {
flatten(root->right);
flatten(root->left);
root->right = pre;
root->left = NULL;
pre = root;
}
}
};
各位帮我看看这段代码有什么问题?我自己测试leetcode给出的数据,没有问题。但是
就是过不了。
如果改成如下写法:
class Solution {
public:
void flatten(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
TreeNode* temp = NULL;
postorder(root, temp);
}
private:
void postorder(TreeNode* node , TreeNode*& temp) {
if (node != NULL){
postorder(node->right,temp);
postorder(node->left,temp);
node->right = temp;
temp = node;
node->left = NULL;
}
}
};
就能通过。
这样是不是可以推测,leetocde是通过如下方式测试:
Solution sl;
sl.flatten(test1);
sl.flatten(test2);
.... | z******1 发帖数: 70 | 2 是这样的leetcode 每一次只会建立一个object, 如果对多个test case进行测试,并
且pre是成员变量的时候, 必须对pre进行刷新,否则pre会保留上次的结果,你过去那
么写pre的初始值就不是NULL了而且之前的test case的pre。 | h******3 发帖数: 351 | 3 我怎么搜不到这个题目呢?
刚刚注册leetcode的人问 | h******3 发帖数: 351 | 4 找到了。
【在 h******3 的大作中提到】 : 我怎么搜不到这个题目呢? : 刚刚注册leetcode的人问
|
|