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()); }
以上是关于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)