Closed zchrissirhcz closed 9 years ago
这题用一个stack可以解决问题,感觉你的代码中用了queue保存节点,没有必要,换成指针就好了: vector preorderTraversal(TreeNode* root){ v.clear(); stack<TreeNode> s; TreeNode\ p=root; while(p!=NULL || !s.empty()){ while(p!=NULL){ v.push_back(p->val); s.push(p); p=p->left; } if(!s.empty()){ p=s.top(); s.pop(); p=p->right; } } return v; }
非常感谢指出了这题的解法很繁琐,你的解法我乍一看没问题,不过没有自己上leetcode验证过。 另外如果只使用一个stack,我也想到了一种更加简单的解法,已经更新并commit了,参见这里的solution2:https://github.com/fanfank/leetcode/blob/master/binary-tree-preorder-traversal.cpp
这题用一个stack可以解决问题,感觉你的代码中用了queue保存节点,没有必要,换成指针就好了: vector preorderTraversal(TreeNode* root){
v.clear();
stack<TreeNode> s;
TreeNode\ p=root;
while(p!=NULL || !s.empty()){
while(p!=NULL){
v.push_back(p->val);
s.push(p);
p=p->left;
}
if(!s.empty()){
p=s.top();
s.pop();
p=p->right;
}
}
return v;
}