LeetCode 117题BFS解法出现诡异队列大小异常问题求助
解决LeetCode 117. 填充每个节点的下一个右侧节点指针 II时的队列异常问题
给定一棵二叉树
struct Node { int val; Node *left; Node *right; Node *next; }填充每个节点的next指针,使其指向右侧相邻节点。若没有右侧相邻节点,next指针设为
NULL。初始时所有next指针均为NULL。
示例1:填充后二叉树的每个节点next指针指向同层右侧节点,最右侧节点的next为NULL。
我实现了一个简单的BFS解法,但第一个测试用例失败。诡异的是,根据输出,第三次while循环结束时队列大小为0,但第四次循环检查队列时,它竟神奇地变成了1!
以下是我的代码及输出:
/* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, Node _left, Node _right, Node _next) { val = _val; left = _left; right = _right; next = _next; } }; */ class Solution { public Node connect(Node root) { Queue<Node> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ int size = queue.size(); System.out.println("-"); System.out.printf("size: %d%n", queue.size()); for(int i=0; i<size-1; i++){ Node curr = queue.poll(); System.out.println("poll"); curr.next = queue.peek(); if(curr.left != null){ System.out.println(curr.left.val); queue.offer(curr.left); } if(curr.right != null){ System.out.println(curr.right.val); queue.offer(curr.right); } } Node last = queue.poll();System.out.println("poll"); // System.out.println(last.val); last.next = null; System.out.printf("size: %d%n", queue.size()); if(last.left != null){ System.out.println(last.left.val); queue.offer(last.left); } System.out.printf("size: %d%n", queue.size()); if(last.right != null){ System.out.println(last.right.val); queue.offer(last.right); } System.out.printf("size: %d%n", queue.size()); } return root; } }
输出结果:
- size: 1 poll size: 0 2 size: 1 3 size: 2 - size: 2 poll 4 5 poll size: 2 size: 2 7 size: 3 - size: 3 poll poll poll size: 0 size: 0 size: 0 - size: 1 poll
内容的提问来源于stack exchange,提问作者shuning lin
相关产品推荐
相关产品推荐

