from collections import deque
.google и
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def build_tree(data):
if not data or data[0] == 'None':.google и
return None
data.pop()
root = TreeNode(int(data[0]))
# queue = [root]
queue = deque([root]). check 1point3acres for more.
i = 1
while queue and i < len(data):. From 1point 3acres bbs
node = queue.popleft()
if data[i] != 'None':
node.left = TreeNode(int(data[i]))
queue.append(node.left)
i += 1
if i >= len(data):. Waral dи,
break
if data[i] != 'None':
node.right = TreeNode(int(data[i]))
queue.append(node.right)
i += 1
return root. 1point 3 acres
def levelOrder(root):. Waral dи,
# base cases
if not root:
return []
# bfs search
res = []
queue = deque([root])
while queue:
level_size = len(queue)
cur_level = [].
for i in range(level_size):
node = queue.popleft()
cur_level.append(int(node.val))
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(cur_level)
# return res. check 1point3acres for more.
return res
input_data = input().split()
tree = build_tree(input_data)
print(levelOrder(tree))
建一个list来存nodes,直接遍历原list, 如果item不为None,新建node并与其parent相连, 与parent的关系可以与位置相关,比如位置为3则其parent为(3-1)/2=1,3是1的左节点,类似4得到1.5,为1的右节点。 这样遍历一边,有数字建node,没数字记为None,O(n) time and space