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':
return None
data.pop()
root = TreeNode(int(data[0]))
# queue = [root] ..
queue = deque([root])
i = 1
while queue and i < len(data):. ----
node = queue.popleft()
if data[i] != 'None':. 1point3acres.com
node.left = TreeNode(int(data[i]))
queue.append(node.left)
i += 1
if i >= len(data):
break
if data[i] != 'None':. 1point 3acres
node.right = TreeNode(int(data[i])) ..
queue.append(node.right)
i += 1
return root-baidu 1point3acres
def levelOrder(root):
# base cases
if not root:.google и
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.1point3acres
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
. check 1point3acres for more. 补充内容 (2023-08-22 03:32 +08:00):
过多的append和pop很花时间