题目:
给出一棵二叉树,返回其节点值的后序遍历。
样例
给出一棵二叉树 {1,#,2,3}
,
1 \ 2 / 3
返回 [3,2,1]
你能使用非递归实现么?
只需将前序遍历中的V.push_back(root->val);放到递归遍历结点的左右子树后
具体实现代码:
/**
* Definition of TreeNode:* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root: The root of binary tree.
* @return: Postorder in vector which contains node values.
*/
public:
vector<int>V;
vector<int> postorderTraversal(TreeNode *root) {
// write your code here
if(root!=NULL){
postorderTraversal(root->left);
postorderTraversal(root->right);
V.push_back(root->val);
}
return V;
}
};
感想:
后序遍历的非递归算法比较复杂,结点要两次进栈,具体实现代码还需考虑。