此题跟 leetCode-116 类似,唯一的不同是,116 是一颗完全二叉树,而本次仅仅是一个二叉树,中间部分节点可能没有孩子。鉴于此,仍然可以用递归来解答,只不过需要改变一下递归的顺序,不能是 本节点 -> 左孩子 -> 右孩子 的顺序了,因为这样的顺序并不能保证在下一层中节点存在空缺时 next 指针的正确连接(因为本层的 next 指针没有完全连接好,所以不能顺着本层找到下层的节点)。需要改成 本节点 -> next 节点 -> 本节点的左孩子(没有左孩子就用右孩子),这样就能保证对当前节点的孩子进行 next 指针匹配时,当前节点右边的节点的 next 指针都已经匹配完成,从而能够为孩子节点的 next 指针匹配找到正确的节点。另外,需要注意的是,按照递归顺序,在 next 递归中,会存在对节点重复遍历的情况,此时进行剪枝判断,如果 next 的节点的孩子节点的 next 指针已经做了匹配,则不用再次进行遍历。代码如下