Binary Tree Postorder Traversal

递归实现。
1
class Solution { 2 public: 3 vector<int> postorderTraversal(TreeNode *root) { 4 if(root->left == NULL && root->right == NULL) 5 { 6 v1.push_back(root->val); 7 return v1; 8 } 9 if(root->left != NULL) 10 postorderTraversal(root->left); 11 if(root->right != NULL) 12 postorderTraversal(root->right); 13 v1.push_back(root->val); 14 return v1; 15 } 16 };

 迭代法,就是用栈进行操作,也比较简单,需要注意的就是对父节点是否被访问过做出标记和空树的处理。

 1 #define NULL 0
 2 
 3 class Solution {
 4 public:
 5     vector<int> postorderTraversal(TreeNode *root) {
 6         vector<int> v1;
 7         stack<TreeNode*> t1;
 8         TreeNode* tmp,*pre;
 9         if(root != NULL)
10         t1.push(root);
11         while(t1.size())
12         {
13             tmp = t1.top();
14             if(tmp->left == NULL && tmp->right == NULL)
15             {
16                    v1.push_back(tmp->val);
17                    t1.pop();
18             }
19             if(pre != tmp->left && pre != tmp->right)
20             {
21                 if(tmp->right != NULL)
22                {
23                 t1.push(tmp->right);
24                }
25                if(tmp->left != NULL)
26                {
27                 t1.push(tmp->left);
28                }
29             }
30             else
31             {
32                 v1.push_back(tmp->val);
33                 t1.pop();
34             }
35             pre = tmp;
36         }
37         return v1;
38     }
39 };

 

posted @ 2014-08-13 09:55  醉剑客  阅读(107)  评论(0编辑  收藏  举报