树的前序遍历的非递归写法。前序遍历是3种中最简单的。同样参考wikipedia: http://en.wikipedia.org/wiki/Tree_traversal
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
/**
* Definition for binary tree
*/
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) {
std::vector<int> vals;
stack<TreeNode *> st;
if (root)
{
st.push(root);
}
TreeNode *node = NULL;
while (!st.empty())
{
node = st.top();
st.pop();
vals.push_back(node->val);
if (node->right)
{
st.push(node->right);
}
if (node->left)
{
st.push(node->left);
}
}
return vals;
}
};
int main()
{
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
Solution s;
std::vector<int> vals = s.preorderTraversal(root);
for (int i = 0; i < vals.size(); ++i)
{
cout<<vals[i]<<"\t";
}
cout<<endl;
return 0;
}