剑指offer(二十二)——从上往下打印二叉树
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题解
这个题意一理解就知道是二叉树的层序遍历,层序遍历就是BFS(广度优先搜索),直接队列搞起就可以,这个搜索还是得学一下的。
- 用队列来存储结点,递归,从而实现层序遍历。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public static ArrayList<Integer> resultList = new ArrayList<>();
public static Queue<TreeNode> nodeQueue = new LinkedList<>();
public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
Search(root);
return resultList;
}
public static void Search(TreeNode root) {
if (root == null) {
return;
}
resultList.add(root.val);
if (root.left != null) {
nodeQueue.offer(root.left);
}
if (root.right != null) {
nodeQueue.offer(root.right);
}
PrintFromTopToBottom(nodeQueue.poll());
}
- 非递归的更加简洁一点,推荐使用。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
/*Search(root);
return resultList;*/
ArrayList<Integer> resultList = new ArrayList<>();
Queue<TreeNode> nodeQueue = new LinkedList<>();
nodeQueue.add(root);
while(nodeQueue.size() != 0) {
TreeNode head = nodeQueue.poll();
resultList.add(head.val);
if (head.left != null) {
nodeQueue.add(head.left);
}
if (head.right != null) {
nodeQueue.add(head.right);
}
}
return resultList;
}