t*********3 发帖数: 87 | 1 是leetcode的题Binary Tree Preorder Traversal
下面的代码能通过leetcode的测试,但是朋友看过说“代码有很大的问题”,然后着急
赶飞机就没来得及给我讲解。因为我之前都没有写过C++,所以也不太明白朋友的意思
。麻烦大家给我讲一下问题所在。我知道论坛里有个别技术牛人喜欢装X,说话挺不客
气的
,大家就“取其精华去其糟粕”只听他们的技术讲解就可以了。
其实我的疑问之一就是声明stack s;这句就这么直接写就行了吗?
class Solution {
public:
vector preorderTraversal(TreeNode* root) {
result.clear();
if(root == NULL) {return result;}
s.push(root);
preorder();
return result;
}
private:
stack s;
vector result;
void preorder(void) {
TreeNode* topNode;
while(!s.empty()) {
topNode = s.top();
result.push_back(topNode->val);
s.pop();
if(topNode->right != NULL) {
s.push(topNode->right);
}
if(topNode->left != NULL) {
s.push(topNode->left);
}
}
return;
}
}; |
e***i 发帖数: 231 | 2 能通过leetcode的测试 == 没有问题
至于coding style,这事儿没法细说 |
a******n 发帖数: 103 | 3 iterative写在一个函数里面就可以了啊。
为什么要有preorder(void)?
private member s和result都可以直接写在function里面啊.
class Solution是leetcode测试程序接口,不能真当一个class。
给你改改:
class Solution{
public:
vector preorderTraversal(TreeNode* root) {
stack s;
vector result;
if (!root)
return result;
s.push(root);
while(!s.empty()) {
TreeNode * topNode = s.top();
result.push_back(topNode->val);
s.pop();
if(topNode->right != NULL) {
s.push(topNode->right);
}
if(topNode->left != NULL) {
s.push(topNode->left);
}
}
return result;
}
}; |
t*********3 发帖数: 87 | 4 我认为朋友说的就是你这个意思。他可能担心class中别的函数改了s和result的内容,
所以想把他俩放到函数中。
【在 a******n 的大作中提到】 : iterative写在一个函数里面就可以了啊。 : 为什么要有preorder(void)? : private member s和result都可以直接写在function里面啊. : class Solution是leetcode测试程序接口,不能真当一个class。 : 给你改改: : class Solution{ : public: : vector preorderTraversal(TreeNode* root) { : stack s; : vector result;
|