后续遍历:
1.C++ 递归:
Recursive solution
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> nodes;
postorder(root, nodes);
return nodes;
}
private:
void postorder(TreeNode* root, vector<int>& nodes) {
if (!root) {
return;
}
postorder(root -> left, nodes);
postorder(root -> right, nodes);
nodes.push_back(root -> val);
}
};
2.C++非递归:
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> nodes;
stack<TreeNode*> todo;
TreeNode* last = NULL;
while (root || !todo.empty()) {
if (root) {
todo.push(root);
root = root -> left;
} else {
TreeNode* node = todo.top();
if (node -> right && last != node -> right) {
root = node -> right;
} else {
nodes.push_back(node -> val);
last = node;
todo.pop();
}
}
}
return nodes;
}
};
python:非递归
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res,stack=[],[]
last=None
while root or stack:
if root:
stack.append(root)
root=root.left
else:
tmp=stack[-1]
if tmp.right and last!=tmp.right:
root=tmp.right
else:
res.append(tmp.val)
del stack[-1]
last=tmp
return res