<
回复: 2
收起左侧

海康威视-技术笔试-代码题-求解

本楼:   👍  0
0%
0%
0   👎
全局:   66
74%
26%
23

2023(7-9月) MachineLearningEng 硕士 全职@海康威视 - 内推 - 在线笔试  | Other | 应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
看似很简单的一道二叉树逐层遍历,我用BFS求解,但是最后却Time Limit Exceed。求助下各位大佬,代码的问题在哪,以及如何优化。
-baidu 1point3acres

.--
以下是原题回忆:. ----
. 1point3acres.com
(1) 给定二叉树的根节点root,返回其节点的层序遍历(也就是逐层,从左到右访问所有节点)。

(2) 输入数据为二叉树跟节点。None表示空节点,!表示结束构建,节点和节点通过空格间隔。

(3) 样例输入:3 9 20 None None 15 7 !

(4) 样例输出:[[3],[9,20],[15,7]]。


以下是我的BFS代码:
.--
from collections import deque

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))

# 样例输入:3 9 20 None None 15 7 !
# 样例输出:[[3],[9,20],[15,7]

上一篇:联想中国OA 8.18
下一篇:Visa Client Consulting Manager Onsite 一面面经
本楼:   👍  0
0%
0%
0   👎
全局:   1188
99%
1%
16
没米,看不见你的code。这题目很容易,按层遍历要用queue,你是不是忘记queue pop了?导致infinite loop
回复

使用道具 举报

wangjilin 2023-8-22 03:29:49 来自APP | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   803
97%
3%
24
建一个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很花时间
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表