144. 二叉树的前序遍历
class Solution {
// 法一:递归
// public List<Integer> preorderTraversal(TreeNode root) {
// List<Integer> res = new ArrayList<>();
// preoder(root,res);
// return res;
// }
// public void preoder(TreeNode root, List<Integer> res){
// if(root == null){
// return;
// }
// res.add(root.val);
// preoder(root.left,res);
// preoder(root.right,res);
// }
// 法二:迭代
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root == null){
return res;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
res.add(node.val);
if(node.right!=null){
stack.push(node.right);
}
if(node.left!=null){
stack.push(node.left);
}
}
return res;
}
}
145. 二叉树的后序遍历
class Solution {
//法一:递归
// public List<Integer> postorderTraversal(TreeNode root) {
// List<Integer> res = new ArrayList<>();
// postorder(root, res);
// return res;
// }
// public void postorder(TreeNode root, List<Integer> res){
// if(root == null){
// return;
// }
// postorder(root.left,res);
// postorder(root.right,res);
// res.add(root.val);
// }
//法二:迭代
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root == null){
return res;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
res.add(node.val);
if(node.left != null){
stack.push(node.left);
}
if(node.right != null){
stack.push(node.right);
}
}
Collections.reverse(res);
return res;
}
}
94. 二叉树的中序遍历
class Solution {
/*
法一:递归
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
inorder(root, res);
return res;
}
public void inorder(TreeNode root, List<Integer> res){
if(root == null){
return;
}
inorder(root.left,res);
res.add(root.val);
inorder(root.right,res);
}
*/
//法二:迭代
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root == null){
return res;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(node != null || !stack.isEmpty()){
if(node != null){
stack.push(node);
node = node.left;
}else{
node = stack.pop();
res.add(node.val);
node = node.right;
}
}
return res;
}
}