Leetcode 之Binary Tree Postorder Traversal(43)

Posted 牧马人夏峥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 之Binary Tree Postorder Traversal(43)相关的知识,希望对你有一定的参考价值。

后序遍历,比先序和中序都要复杂。访问一个结点前,需要先判断其右孩子是否被访问过。如果是,则可以访问该结点;否则,需要先处理右子树。

 vector<int> postorderTraversal(TreeNode *root)
      {
          vector<int> result;
          stack<TreeNode *>s;
          TreeNode *p, *q;//一个表示当前访问的结点,一个表示刚刚访问过的结点
          p = root;
          do
          {
              while (p != nullptr)
              {
                  //不断将左结点压入
                  s.push(p);
                  p = p->left;
              }
              q = nullptr;//压到底时,刚刚访问过的结点必定为空结点
              while (!s.empty())
              {
                  p = s.top();
                  s.pop();
                  if (p->right == q)
                  {
                      //如果当前结点的右结点已经被访问,则访问该结点
                      result.push_back(p->val);
                      q = p;
                  }
                  else
                  {
                      //右孩子没有被访问过,则继续压入,先处理右子树
                      s.push(p);
                      p = p->right;
                      break;
                  }
              }
          } while (!s.empty());
      }
View Code

 

以上是关于Leetcode 之Binary Tree Postorder Traversal(43)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 之Binary Tree Postorder Traversal(44)

Leetcode 之Binary Tree Preorder Traversal(42)

LeetCode之104. Maximum Depth of Binary Tree

Leetcode 之Binary Tree Postorder Traversal(43)

LeetCode题解之Diameter of Binary Tree

Leetcode 之Binary Tree Inorder Traversal(43)