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     }

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

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

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

  • 相关阅读:
    CDN用户访问调度流程
    最近复习原型 终于明白了一点 写下原型相对比较完美的一种继承方式
    flex布局学习
    Vuex基本使用
    Promise的基本使用
    创建对象的几种方式
    父访问子的数据方法
    购物车案例
    插槽的使用
    ref获取DOM元素
  • 原文地址:https://www.cnblogs.com/mike442144/p/leetcode.html
Copyright © 2011-2022 走看看