import java.util.ArrayList;
import java.util.Stack;
public class l145_tree_postorder {
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val=x;
}
}
//遞歸
/*
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> res=new ArrayList<>();
if(root==null)
return res;
res.addAll(postorderTraversal(root.left));
res.addAll(postorderTraversal(root.right));
res.add(root.val);
return res;
}
*/
//非遞歸
public ArrayList<Integer> postorderTraversal(TreeNode root){
ArrayList<Integer> res=new ArrayList<>();
if(root==null)
return res;
Stack<TreeNode> s=new Stack<>();
s.push(root);
while (!s.empty()){
TreeNode temp=s.pop();
res.add(0,temp.val);//根右左-左右根(每次都在第一個位置添加,相當於reverse)
//藉助棧的先進後出(根左右-根右左)
if(temp.left!=null){
s.push(temp.left);
}
if(temp.right!=null){
s.push(temp.right);
}
}
return res;
}
}
LeetCode(145)-二叉樹後序遍歷(遞歸、非遞歸)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.