查看: 1576| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 就是,链表和图题我都有一个不懂的地方leetcode

全局:

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

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

x
本帖最后由 sy10017667 于 2015-11-9 23:08 编辑

https://leetcode.com/problems/binary-tree-level-order-traversal/

Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]
我用的python
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
我理解,那个TreeNode的构建,是一个类, 类包括3个数据,1个是val left 和right

但是我不懂的是, 为什么在答案的那个类里面, levelorder那个method里,输入值是root
输入的不应该是一个 tree嘛, 链表我也不是很懂,还去把 #删掉了,增加了 getNode, DeleteNode几个方法在链表的类里
自己做不出来,下面是我找到一个答案在尝试理解
def levelOrder(self, root):       # 输入root
        if root is None:          # 如果根节点为空
            return []             #返回空

        nodes = [root]            #当前node
        values = [[root.val]]     #当前 node里的值  为什么两个[]

        while True:                # 这句不懂,while一般不应该是 X== True 或者是 X> n 这种形式吗
            newnodes = []        # 不知道在干什么
            newvalues = []         #不知道在干什么

            for n in nodes:                         # 遍历所有节点
                left, right = n.left, n.right       # 赋值
                if left is not None:                 # 当前节点的左节点为空
                    newnodes.append(left)        #在newnodes 节点里添加 当前节点的左子节点
                    newvalues.append(left.val)   #在newnodes 节点里添加 当前节点的左子节点的值  ,这个也不是很理解
                if right is not None:
                    newnodes.append(right)
                    newvalues.append(right.val)

            if not newvalues:                              如果newvalues的值为假
                return values                              返回values  

            values.append(newvalues)               
            nodes = newnodes                               #语句看得懂,不知道在干嘛


哎呀好难过啊,leetcode好难
顺便问一下, 如果leetcode 说这道题是 BFS, linked list 有没有必要去复习一下概念呢?  用CC150 , expolosed to interviews? or
http://interactivepython.org/runestone/static/pythonds/index.html


上一篇:一道面试题,Ip地址范围找到对应城市
下一篇:Amazon OA 2 视频非常卡 怎么办?
🔗
stellari 2015-11-10 13:02:19 | 只看该作者
全局:
levelOrder是对一个树进行的操作,所以输入理应是一个树,这个逻辑是对的。只不过对树来讲,只要知道了根节点,之后的所有节点都可以被顺次访问到,所以我们用根节点来表示这个树即可,而不需要另外维护这个树中其它节点的地址(特殊需要除外)。这和我们只用单向链表的首元素来代表整个链表是一个道理。

个人意见,如果说到BFS,Linked List你还认为自己有复习概念的必要,那么你就非常有复习的必要。通过你能找到的任何途径都可以,比如我就是在Leetcode上纯看别人代码学会的。如果我是面试官,看到你连BFS都写不出来,是无论如何不会给你正面评价的。希望你多加油。
回复

使用道具 举报

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

本版积分规则

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