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

    今天看到园子一位作者阿牧遥的博客,看到了另一个思路。

    判断前驱节点是父亲还是左儿子实现是第几次访问或者说是左右子树是否已经遍历完毕。

    阿牧遥的这篇博客讲的挺详细的。

  • 相关阅读:
    PS插件安装
    在linux中安装Python
    快慢指针 | 环形链表
    Intel VT-x 支持但处于禁用状态开启
    函数
    连接(交叉连接、内连接、外连接、自连接)
    游标cursor 与循环fetch
    Identity 自增长标识
    Trigger 触发器
    Procedure 存储过程
  • 原文地址:https://www.cnblogs.com/mike442144/p/leetcode.html
Copyright © 2020-2023  润新知