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 };