144. 二叉樹的前序遍歷
描述:
給定一個二叉樹,返回它的 前序 遍歷。
示例:
輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,2,3]
代碼:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
Stack<TreeNode> stack=new Stack<TreeNode>();
List<Integer> list=new ArrayList<Integer>();
TreeNode cur=root;
if(cur==null)
return list;
stack.push(root);
list.add(root.val);
while(!stack.isEmpty()||cur.left!=null){
if(cur.left!=null){
cur=cur.left;
stack.push(cur);
list.add(cur.val);
}else{
cur=stack.pop();
if(cur.right!=null){
cur=cur.right;
stack.push(cur);
list.add(cur.val);
}else{
cur.left=null;
}
}
}
return list;
}
}
94. 二叉樹的中序遍歷
描述:
給定一個二叉樹,返回它的中序 遍歷。
示例:
輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2]
進階: 遞歸算法很簡單,你可以通過迭代算法完成嗎?
代碼:
遞歸方法:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<Integer>();
if(root==null)
return new ArrayList<Integer>();
else{
List<Integer> listLeft=inorderTraversal(root.left);
list.addAll(listLeft);
list.add(root.val);
List<Integer> listRight=inorderTraversal(root.right);
list.addAll(listRight);
}
return list;
}
}
非遞歸方法:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (cur != null || !stack.isEmpty()) {
if (cur != null) {
stack.push(cur);
cur = cur.left;
} else {
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
}
return list;
}
}