在刷力扣107题,二叉树的层序遍历时,我发现自己写的代码和题解代码几乎一模一样,但是我的代码执行起来会有问题,题解代码可以正常通过,然后我就一点一点对照,发现问题出在下面我标注的地方,但是我想不出来为什么这点差异会导致结果有问题。
这张是题解代码以及他的执行结果:
这张是我的代码及执行结果:
两份代码的差异就在于for循环的条件,题解代码是将队列的大小queue.size()赋值给了一个int类型的size,然后用size作为条件,而我是直接用queue.size()作为条件的,我感觉这效果应该是一样的,但是为什么执行结果会不一样呢,求解答。
因为你在循环中操作了queue,导致queue的大小在变化
你在for循环中可能给队列增加了元素,所以两种方法显然是不一样了
上面图中,size提前获得,那么循环次数是固定的,就是在循环之前队列中所有元素
下面图中,由于循环过程中可能不断给队列尾增加元素,导致每次循环计算的size()结果在增加,循环次数就在增加。导致循环对于后续新增的队列尾元素也进行了循环处理
因此两者完全不同,除非循环过程中,队列实际没有增加任何元素