zoukankan      html  css  js  c++  java
  • 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     }

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

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

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

  • 相关阅读:
    一位区域销售经理百条经验手记
    PAIP.FLEX与JAVA数据对应关系.txt
    转:java生成EXCEL表格(POI vs JXL)
    逆向分析工具介绍
    applet与SERLET交互...
    AT命令集(
    关于WINDOWS超级终端的使用来调试MODEM,串口.
    poj1331
    poj1338
    poj1325
  • 原文地址:https://www.cnblogs.com/mike442144/p/leetcode.html
Copyright © 2011-2022 走看看