144. Binary Tree Preorder Traversal题解
题目描述:
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
题目链接:144. Binary Tree Preorder Traversal
算法描述:
由题意知,给定一个二叉树,我们需要对其进行前序遍历(不鼓励运用递归,而用迭代),返回依次遍历到的节点的值。
我们构造一个结果容器 ans 用于填装遍历到的节点的值,再构造一个栈 st 用于辅助前序遍历。
如果树的根节点为空,则直接返回 ans。否则将其装入栈 st ,进入循环。每次从栈里面取出一个节点,将其值放入容器 ans,之后我们查看该节点是否有左右子树,首先检查右子树,如果有则将节点放入栈 st ,再检查左子树,如果有则将节点放入栈 st。(栈的模式为先进后出)
如果栈 st 为空,则循环结束,返回结果容器。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> st;
if(root==NULL){
return ans;
}
st.push(root);
while(!st.empty()){
TreeNode* temp = st.top();
ans.push_back(temp->val);
st.pop();
if(temp->right != NULL){
st.push(temp->right);
}
if(temp->left != NULL){
st.push(temp->left);
}
}
return ans;
}
};