Given a binary tree, return the postorder traversal of its nodes‘ values.
For example:
Given binary tree {1,#,2,3}
,
1 2 / 3
return [3,2,1]
.
Note: Recursive solution is trivial, could you do it iteratively?
非递归地遍历二叉树。坑爹...一开始用 if(!cur->left) 的形式来测试空指针...结果一直 runtime error....原来空指针的 bool 值不为 false 啊....
二叉树的前序和中序的非递归遍历比较好做,后序比较难想。不过思路还是用 stack 来解决的。我们需要思考一个问题,什么时候才可以访问一个元素(即遍历时处理到它)?
我们考虑对一个栈顶元素 cur ,如果:
C++:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> postorderTraversal(TreeNode *root) { vector<int> ans; stack<TreeNode*> node; if(root == NULL) return ans; node.push(root); TreeNode* last = root; while(!node.empty()) { TreeNode* cur = node.top(); if(last == cur->right || last == cur->left || ((cur->right == NULL) && ( cur->left == NULL))) { ans.push_back(cur->val); node.pop(); last = cur; } else { if(cur->right != NULL) node.push(cur->right); if(cur->left != NULL) node.push(cur->left); } } return ans; } };
Python:
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return a list of integers def postorderTraversal(self, root): ans = [] stack = [] if root == None: return ans stack.append(root) last = root while len(stack): cur = stack[len(stack)-1] if last == cur.left or last == cur.right or (cur.left == None and cur.right == None): ans.append(stack.pop().val) last = cur else: if cur.right != None: stack.append(cur.right) if cur.left != None: stack.append(cur.left) return ans
【LeetCode】Binary Tree Postorder Traversal
原文地址:http://blog.csdn.net/jcjc918/article/details/44489363