102. 二叉树的层序遍历
层遍历:
当前节点入队,弹出并打印,左右子节点入队
public static void leveOrder(TreeNode head){
if(head==null){
return;
}
Queue<TreeNode> queue=new LinkedList<>();
queue.add(head);
while (!queue.isEmpty()){
TreeNode cur=queue.poll();
System.out.println(cur.val);
if(head.left!=null){
queue.add(head.left);
}
if(head.right!=null){
queue.add(head.right);
}
}
}
统计最多的节点数
用HashMap来记录当前节点的在哪一层
public static int leveOrderCount(TreeNode head){
if(head==null){
return 0;
}
Queue<TreeNode> queue=new LinkedList<>();
queue.add(head);
//这个节点在哪一层
HashMap<TreeNode,Integer> leveMap=new HashMap<>();
leveMap.put(head,1);
int level=1;
int curNodes=0;
int maxNodes=0;
List<Integer> list=new ArrayList<>();
while (!queue.isEmpty()){
TreeNode cur=queue.poll();
Integer curlevel = leveMap.get(cur);
if(level==curlevel){
curNodes++;
list.add(cur.val);
}else{
//来到了下一层
//统计最大了节点数
maxNodes= Math.max(curNodes, maxNodes);
level++;
curNodes=1;
}
System.out.println(cur.val);
if(cur.left!=null){
leveMap.put(cur.left,curlevel+1);
queue.add(cur.left);
}
if(cur.right!=null){
leveMap.put(cur.right,curlevel+1);
queue.add(cur.right);
}
}
return Math.max(maxNodes,curNodes);
}
102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:用HashMap来记录当前节点的在哪一层
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resultList=new ArrayList<>();
if(root==null){
return resultList;
}
List<Integer> curLevelList=new ArrayList<>();
HashMap<TreeNode,Integer> levelMap=new HashMap<>();
levelMap.put(root,1);
int level=1;
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root)
while(!queue.isEmpty()){
TreeNode curNode=queue.poll();
int curLevel=levelMap.get(curNode);
if(level==curLevel){
curLevelList.add(curNode.val);
}else{
resultList.add(curLevelList);
level++;
curLevelList=new ArrayList<>();
curLevelList.add(curNode.val);
}
if(curNode.left!=null){
levelMap.put(curNode.left,curLevel+1);
queue.add(curNode.left);
}
if(curNode.right!=null){
levelMap.put(curNode.right,curLevel+1);
queue.add(curNode.right);
}
}
resultList.add(curLevelList);
return resultList;
}
}
剑指 Offer II 044. 二叉树每层的最大值
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
解释:
1
/ \
3 2
/ \ \
5 3 9
public List<Integer> largestValues(TreeNode root) {
List<Integer> res=new ArrayList<>();
if(root==null){
return res;
}
//level quque linkedList cur l f
TreeNode cur=root;
LinkedList<TreeNode> queue=new LinkedList<>();
queue.add(cur);
Map<TreeNode,Integer> levelMap=new HashMap<>();
levelMap.put(cur,1);
int max=Integer.MIN_VALUE;
int curLevel=1;
while(!queue.isEmpty()){
cur=queue.poll();
//System.out.println(cur.val);
Integer level = levelMap.get(cur);
if(curLevel==level){
max=Math.max(max,cur.val);
}else{
res.add(max);
curLevel++;
max=cur.val;
}
// System.out.println(max);
if(cur.left!=null){
levelMap.put(cur.left,level+1);
queue.add(cur.left);
}
if(cur.right!=null){
levelMap.put(cur.right,level+1);
queue.add(cur.right);
}
}
max=Math.max(max,cur.val);
// System.out.println(max);
res.add(max);
return res;
}

浙公网安备 33010602011771号