1.前序
/**
* 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) {
vector<int> v;
TreeNode* p = root;
stack<TreeNode*> s;
while(p || !s.empty()){
while(p){
<span style="color:#ff0000;">v.push_back(p->val);/* 访问根节点 */</span>
s.push(p);
p = p->left;/* 访问左子树 */
}
if(!s.empty()){
p = s.top()->right;/* 访问右子树 */
//v.push_back(s.top()->val);
s.pop();
}
}
return v;
}
};
2. 中序
/**
* 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> inorderTraversal(TreeNode *root) {
vector<int> v;
TreeNode* p = root;
stack<TreeNode*> s;
while(p || !s.empty()){
while(p){
// v.push_back(p->val);
s.push(p);
p = p->left;/* 访问左子树 */
}
if(!s.empty()){
<span style="color:#ff0000;"> <span style="font-family: Arial, Helvetica, sans-serif;">v.push_back(s.top()->val); /* 访问根节点 */</span></span><pre code_snippet_id="464620" snippet_file_name="blog_20140905_2_3449297" name="code" class="cpp"> p = s.top()->right;/* 访问右子树 */
s.pop(); } } return v; }};
3.后序
/**
* 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> postorderTraversal(TreeNode* root){
vector<int> v;
stack<TreeNode*>st;
TreeNode* p = root;
while(p || !st.empty()){
while(p){
st.push(p);
p = p->left;/*访问左子树*/
}
TreeNode* pre = NULL;
while(!st.empty() && st.top()->right == pre){/* 当右子树为空或者右子树已经访问过时,输出根节点,此时左子树已经访问完成*/
v.push_back(st.top()->val);
pre = st.top();
st.pop();
}
if(st.empty()) break;
p = st.top()->right;/*访问右子树*/
}
return v;
}
};