Binary Tree Postorder Traversal
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 }
今天看到园子一位作者阿牧遥的博客,看到了另一个思路。
判断前驱节点是父亲还是左儿子实现是第几次访问或者说是左右子树是否已经遍历完毕。
阿牧遥的这篇博客讲的挺详细的。
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步