LeetCode上一道题目
递归实现后序遍历
我在OJ上直接使用了Tag的方法标志是第几次访问结点来区分,代码如下:
1 vector<int> postorderTraversal(TreeNode *root) { 2 // IMPORTANT: Please reset any member data you declared, as 3 // the same Solution instance will be reused for each test case. 4 vector<int> result; 5 if(root==NULL) 6 return result; 7 vector<TreeNode*> stack; 8 unordered_set<TreeNode*> tags; 9 stack.push_back(root); 10 while(!stack.empty()){ 11 root = stack.back(); 12 if(root->left&&tags.count(root->left)==0) { 13 stack.push_back(root->left); 14 tags.insert(root->left); 15 continue; 16 } 17 if(root->right&&tags.count(root->right)==0){ 18 stack.push_back(root->right); 19 tags.insert(root->right); 20 continue; 21 } 22 result.push_back(root->val); 23 stack.pop_back(); 24 } 25 return result; 26 }
今天看到园子一位作者阿牧遥的博客,看到了另一个思路。
判断前驱节点是父亲还是左儿子实现是第几次访问或者说是左右子树是否已经遍历完毕。
阿牧遥的这篇博客讲的挺详细的。