二叉树的前中后序遍历,层次遍历以及Z形遍历
前中后序遍历
public int[][] threeOrders (TreeNode root) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
List<Integer> list3 = new ArrayList<>();
preOrder(root, list1);
inOrder(root, list2);
postOrder(root, list3);
int[][] res = new int[3][list1.size()];
for(int i = 0; i < list1.size(); i++){
res[0][i] = list1.get(i);
res[1][i] = list2.get(i);
res[2][i] = list3.get(i);
}
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);
}
public void inOrder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
inOrder(root.left, list);
list.add(root.val);
inOrder(root.right, list);
}
public void postOrder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
postOrder(root.left, list);
postOrder(root.right, list);
list.add(root.val);
}
}
层次遍历(BFS)
public ArrayList<ArrayList<Integer>> levelOrder(Node root) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if (root == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
ArrayList<Integer> list = new ArrayList<>();
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left!=null) queue.offer(node.left);
if(ndoe.right!=null) queue.offer(node.right);
}
result.add(list);
}
return result;
}
Z形遍历
public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root == null)
return result;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int count = 0;
while(!queue.isEmpty()){
count++;
ArrayList<Integer> list = new ArrayList<Integer>();
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left != null)queue.offer(node.left);
if(node.right != null)queue.offer(node.right);
}
if (count %2 == 0) Collections.reverse(list);
result.add(list);
}
return result;
}