题目:给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历 。
思路一:递归法。
代码:
public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();postOrder(root,result);return result;}public void postOrder(TreeNode root,List<Integer> result){if(root==null)return;postOrder(root.left,result);postOrder(root.right,result);result.add(root.val);}
思路二:迭代法。
代码:
public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();Stack<TreeNode> stack=new Stack<>();if(root!=null){stack.push(root);}while(!stack.isEmpty()){TreeNode node=stack.peek();if(node!=null){stack.pop();// 将该节点弹出,避免重复操作,下面再将中右左节点添加到栈中stack.push(node);//压入中节点stack.push(null);//中节点只访问,未处理,压入Null来标记if(node.right!=null) stack.push(node.right);//压入右节点if(node.left!=null) stack.push(node.left);//压入左节点}else{stack.pop();//弹出nullTreeNode n=stack.peek();//处理中节点result.add(n.val);stack.pop();//中节点加入结果集后弹出}}return result;}