1、题目描述
输入一个二叉树,返回它的先序遍历。
2、思路
非递归法。
声明stack。当root非NULL时,把root的val放入ans,
若root的right非NULL,将right放入stack,
令root = root的left。
若root为NULL,则取出stack的最顶节点,让它等于root。
这样就保持了先输出根节点,再左节点最后右节点的先序遍历。
3、代码
vector<int> preorderTraversal(TreeNode* root) {
vector<int>ans;
stack<TreeNode*> s;
while(root){
ans.push_back(root->val);
if(root->right){
s.push(root->right);
}
root = root->left;
if(root==NULL&&!s.empty()){
root = s.top();
s.pop();
}
}
return ans;
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int>ans;
stack<TreeNode*> s;
if(root == NULL)
return ans;
s.push(root);
while(!s.empty()) {
root = s.top();
s.pop();
ans.push_back(root->val);
if(root->right){
s.push(root->right);
}
if(root->left) {
s.push(root->left);
}
}
return ans;
}