zoukankan      html  css  js  c++  java
  • LeetCode 面试题 特定深度节点链表

    Leetcode 面试题 特定深度节点链表

    1. 给定一个二叉树,要求返回一个ListNode[]
    2. ListNode[]中每个节点i代表二叉树中第i从左到右所有节点构成的链表

    思路: BFS

    1. 遍历过程中对每层节点创建一个ListNode链表,并将头节点放入返回参数ListNode[]

    执行结果: 通过
    执行用时:1 ms , 在所有 Java 提交中击败了 99.13% 的用户
    内存消耗:38.2 MB , 在所有 Java 提交中击败了 100.00% 的用户

    /*广度优先遍历*/
    class Solution {
        public ListNode[] listOfDepth(TreeNode tree) {
            //返回参数
            List<ListNode> ansList = new ArrayList<>();
            //边界情况
            if(tree==null)
                return new ListNode[]{};
    
            //bfs队列(提前加入根节点)
            List<TreeNode> bfs = new LinkedList<>();
            bfs.add(tree);
            //记录每层节点数目(当前层oldNum,下一层newNum)
            int oldNum = 1, newNum = 0;
            //添加该层链表头节点(虚拟头节点,方便后续操作)
            ListNode head = new ListNode(-1);
            ansList.add(head);
            while(!bfs.isEmpty()) {
                TreeNode node = bfs.get(0);
                bfs.remove(0);
                oldNum--;
                //更新链表
                head.next = new ListNode(node.val);
                head = head.next;
                //下层节点入队
                if(node.left!=null) {
                    bfs.add(node.left);
                    newNum++;
                }
                if(node.right!=null) {
                    bfs.add(node.right);
                    newNum++;
                }
                //遍历层交替
                if(oldNum==0) {
                    oldNum = newNum;
                    newNum = 0;
                    if(oldNum!=0) {
                        head = new ListNode(-1);
                        ansList.add(head);
                    }
                }
            }
            //List转数组,同时将每层链表虚拟头节点去除
            ListNode[] ans = new ListNode[ansList.size()];
            for(int i=0; i<ansList.size(); i++)
                ans[i] = ansList.get(i).next;
    
            return ans;
        }
    }
    
  • 相关阅读:
    设计模式六大原则
    .net Stream篇(七)
    .net Stream篇(六)
    .net Stream篇(五)
    .net Stream篇(四)
    Leetcode 18
    Leetcode 16
    Leetcode 15
    Leetcode 12
    Leetcode 9
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13375547.html
Copyright © 2011-2022 走看看