二叉树的前序遍历:根 左 右
递归
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer>res=new ArrayList<>();
preorder(root,res);
return res;
}
public void preorder(TreeNode root,List<Integer>list){
if(root==null) return;
list.add(root.val);
preorder(root.left,list);
preorder(root.right,list);
}
}
迭代:队列存取右子树
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer>res=new ArrayList<>();
Deque<TreeNode>stack=new LinkedList<>();
TreeNode temp=root;
while(temp!=null||!stack.isEmpty()){
while(temp!=null){
stack.addFirst(temp.right);
res.add(temp.val);
temp=temp.left;
}
temp=stack.removeFirst();
}
return res;
}
}
二叉树的中序遍历:左 根 右
递归
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer>res=new ArrayList<>();
preorder(root,res);
return res;
}
public void preorder(TreeNode root,List<Integer>list){
if(root==null) return;
preorder(root.left,list);
list.add(root.val);
preorder(root.right,list);
}
}
迭代
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer>res=new ArrayList<>();
Deque<TreeNode>queue=new LinkedList<>();
TreeNode temp=root;
while(temp!=null||!queue.isEmpty()){
while(temp!=null){
queue.addFirst(temp);
temp=temp.left;
}
temp=queue.removeFirst();
res.add(temp.val);
temp=temp.right;
}
return res;
}
}
二叉树的后序遍历:左 右 根
递归
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer>res=new ArrayList<>();
preorder(root,res);
return res;
}
public void preorder(TreeNode root,List<Integer>list){
if(root==null) return;
preorder(root.left,list);
preorder(root.right,list);
list.add(root.val);
}
}
迭代,后续遍历结果的逆序为根 右 左,参考前序遍历根 左 右
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer>res=new ArrayList<>();
Deque<TreeNode>queue=new LinkedList<>();
TreeNode temp=root;
while(temp!=null||!queue.isEmpty()){
while(temp!=null){
queue.addFirst(temp.left);
res.add(temp.val);
temp=temp.right;
}
temp=queue.removeFirst();
}
Collections.reverse(res);
return res;
}
}