题解
递归的方法很简单,重点是能不能熟练应用非递归的方法。通常根据条件,需要借助队列(queue)或者栈(stack)的结构。
preorder遍历的顺序是“root ==> left ==> right”,而树的遍历是从根节点(root)开始,所以考虑栈的数据结构,因为它实现数据的“先进后出”。
注意检查空节点。
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
std::vector<int> ret;
std::stack<TreeNode*> s;
if(!root) return ret;
s.push(root);
while(!s.empty()) {
TreeNode* n = s.top();
s.pop();
ret.push_back(n->val);
if(n->right) s.push(n->right);
if(n->left) s.push(n->left);
}
return ret;
}
};