二叉树的层次遍历(BFS)
利用队列先进后出的特性
每层控制大小 进行遍历(list)
102. 二叉树的层序遍历
class Solution {List<List<Integer>> ans = new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {checkfun01(root);return ans;}public void checkfun01(TreeNode node){if (node == null) return;Queue<TreeNode> que = new LinkedList<TreeNode>();que.offer(node);while(!que.isEmpty()){List<Integer> itemList = new ArrayList<Integer>();int len = que.size();while(len>0){len--;TreeNode model = que.poll(); if (model != null) { itemList.add(model.val);// 这里必须用 model,不能用 node!if (model.left != null) que.offer(model.left); if (model.right != null) que.offer(model.right); }}ans.add(itemList);}}
}
199. 二叉树的右视图
class Solution {List<Integer> res = new ArrayList<Integer>();public List<Integer> rightSideView(TreeNode root) {chek01(root);return res;}public void chek01(TreeNode root){if(root == null) return;Queue<TreeNode> q = new LinkedList<TreeNode>();q.offer(root);while(!q.isEmpty()){int len = q.size(); List<Integer> item = new ArrayList<Integer>();for(int i = 0;i<len;i++){TreeNode tempNode = q.poll();if(tempNode != null){if(tempNode.left !=null ) q.offer(tempNode.left);if(tempNode.right != null) q.offer(tempNode.right);if(i==len-1) res.add(tempNode.val);}}}}
}
637. 二叉树的层平均值
class Solution {List<Double> ans = new ArrayList<Double>();public List<Double> averageOfLevels(TreeNode root) {bfs(root);return ans;}public void bfs(TreeNode root){if(root == null) return;Queue<TreeNode> q = new LinkedList<TreeNode>();q.offer(root);while(!q.isEmpty()){int len = q.size();int n = len;Double sum = 0.0;for(int i = 0;i<len;i++){TreeNode temp = q.poll();sum+=temp.val;if(temp.left !=null) q.offer(temp.left);if(temp.right!=null) q.offer(temp.right);}ans.add(sum/n);}}}