if pre.left: queue.append(pre.left) if pre.right: queue.append(pre.right) for i in xrange(1, size): cur = queue.pop(0) if cur.left: queue.append(cur.left) if cur.right: queue.append(cur.right) pre.next = cur pre = cur if __name__ == '__main__': n1 = TreeLinkNode(1) n2 = TreeLinkNode(2) n3 = TreeLinkNode(3) n4 = TreeLinkNode(4) n5 = TreeLinkNode(5) n6 = TreeLinkNode(6) n7 = TreeLinkNode(7) n8 = TreeLinkNode(8) n1.left = n2 n1.right = n3 n2.left = n4 n2.right = n5 n3.left = n6 n3.right = n7 n4.left = n8
if root: root_next = root.next while root_next and not root_next.left and not root_next.right: root_next = root_next.next if root.left: root.left.next = root.right or ( (root_next.left or root_next.right) if root_next else None) if root.right: root.right.next = (root_next.left or root_next.right) if root_next else None self.connectDFS(root.right) self.connectDFS(root.left) if __name__ == '__main__': n1 = TreeLinkNode(2) n2 = TreeLinkNode(1) n3 = TreeLinkNode(3) n4 = TreeLinkNode(0) n5 = TreeLinkNode(7) n6 = TreeLinkNode(9) n7 = TreeLinkNode(1) n8 = TreeLinkNode(2) n9 = TreeLinkNode(1) n10 = TreeLinkNode(0) n11 = TreeLinkNode(8) n12 = TreeLinkNode(8) n13 = TreeLinkNode(7) n1.left = n2 n1.right = n3
def connect(self, root): if root: root_next = root.next while root_next and not root_next.left and not root_next.right: root_next = root_next.next if root.left: root.left.next = root.right or ((root_next.left or root_next.right) if root_next else None) if root.right: root.right.next = (root_next.left or root_next.right) if root_next else None self.connect(root.right) self.connect(root.left) if __name__ == '__main__': n1 = TreeLinkNode(2) n2 = TreeLinkNode(1) n3 = TreeLinkNode(3) n4 = TreeLinkNode(0) n5 = TreeLinkNode(7) n6 = TreeLinkNode(9) n7 = TreeLinkNode(1) n8 = TreeLinkNode(2) n9 = TreeLinkNode(1) n10 = TreeLinkNode(0) n11 = TreeLinkNode(8) n12 = TreeLinkNode(8) n13 = TreeLinkNode(7) n1.left = n2 n1.right = n3