题目:给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历。
思路一:递归法。
代码:
java
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);
}
思路二:迭代法。
代码:
java
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();//弹出null
TreeNode n=stack.peek();//处理中节点
result.add(n.val);
stack.pop();//中节点加入结果集后弹出
}
}
return result;
}