Pre Order Traverse
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
std::stack<TreeNode*> temp;
while (root || !temp.empty()) {
while (root) {
temp.push(root);
res.push_back(root->val);
root = root->left;
}
root = temp.top();
temp.pop();
root = root->right;
}
return res;
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
std::stack<TreeNode*> temp;
while (root || !temp.empty()) {
while (root) {
temp.push(root);
res.push_back(root->val);
root = root->left;
}
root = temp.top();
temp.pop();
root = root->right;
}
return res;
}
In Order Traverse
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
std::stack<TreeNode*> temp;
while (root || !temp.empty()) {
while (root) {
temp.push(root);
root = root->left;
}
root = temp.top();
temp.pop();
res.push_back(root->val);
root = root->right;
}
return res;
}
Post Order Traverse
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
std::stack<TreeNode*> temp;
while (root || !temp.empty()) {
while (root) {
temp.push(root);
res.insert(res.begin(),root->val);
root = root->right;
}
root = temp.top();
temp.pop();
root = root->left;
}
return res;
}
以上是我自己c++版本的实现
另附一篇比较详细的博客: http://www.cnblogs.com/dolphin0520/