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;

    }

  

posted @ 2021-09-02 16:59  sherry001  阅读(67)  评论(0编辑  收藏  举报