binary-tree-postorder-traversal

来源:互联网 发布:红叶知弦与男主本子 编辑:程序博客网 时间:2024/06/07 08:44

题目描述:

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?

代码实现:java的非递归实现,但是一直提示输入为{},返回应为『』,当时这里返回了null


import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}public class PostorderTraversal {public ArrayList<Integer> postorderTraversal(TreeNode root) {ArrayList<Integer> postorder_val = null;Deque<TreeNode> postorder_stack = new ArrayDeque<TreeNode>();TreeNode cur = root;// 指向当前节点TreeNode pre = null;// 指向上一个访问的结点if (cur == null)return postorder_val;postorder_stack.push(cur);// 先将树的根节点入栈while (!postorder_stack.isEmpty()) {cur = postorder_stack.peek();if ((cur.left == null && cur.right == null) || ((pre != null) && (cur.left == pre || cur.right == null))) {postorder_stack.pop();postorder_val.add(cur.val);pre = cur;} else {if (cur.right != null)postorder_stack.push(cur.right);if (cur.left != null)postorder_stack.push(cur.left);}}return postorder_val;}}

第二种方法给出C++的递归实现代码:

这里就要比较一下C++中vector和arraylist的初始化的不同了.

c++递归代码:

class Solution{public:vector<int> postorderTraversal(TreeNode *root){vector<int> vec;if(root == NULL) return vec;helper(vec,root);return vec;}public:void helper(vector<int> &vec, TreeNode *root){if(root == NULL) return;helper(vec, root->left);helper(vec, root->right);vec.push_back(root->val);}};






0 0