<
查看: 2402|回复: 9
收起左侧

[树/链表/图] 用 Python 等语言写树结构的疑问

|只看干货
dcclogin | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (155)
 
 
0% (0)    👎
最近想做几道算法题,但是我并不熟悉用任何刷题用的主流语。我发现我用这些语言似乎表达不出我想要的语义。拿 Python 写二叉树结构为例,我用 Python 的类定义好了 Leaf 和 Node 的结构,假设现在我想定义一个结构或者类型,叫“Leaf 或者 Node”,起名为“Tree”,在 Python 里是怎么处理的呢?或者 Java、C、C++都行。(如下图,我写习惯了 Typed Scheme,所以在接触算法题之前用的都是 Union Type 来表示这些“递归数据类型”,其实就是想在 Python 等主流语言里找个对应的写法)

如果实在没有满足我需求的写法的话,大家用这些语言一般是怎么表示这些“递归数据类型”,以方便刷题需求的呢,不会是树里套表这种的吧?......



另外我还想知道,Python 有什么机制(比如 contract)防止 Node 的左右两边加进去奇怪的东西而不是 Node 或 Leaf ......


[Python] 纯文本查看 复制代码
class Node(object):
	def __init__(self, l=None, r=None):
		self.left  = l
		self.right = r

class Leaf(object):
	def __init__(self, v=None):
		self.val = v

	def get_val(self):
		return self.val



本帖子中包含更多资源

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

x

上一篇:1055 java最优解 ??
下一篇:请问大家有刷SQL的网站推荐吗,谢谢!
本楼: 👍   100% (3)
 
 
0% (0)   👎
全局: 👍   94% (9125)
 
 
5% (576)    👎
虽然感觉不用给node和leaf分开两个类(node也要有val的呀,leaf就是left和right都为none的node)

但如果非要有node有leaf还有一个类表示他俩任意之一,感觉用继承(inheritance)就好了
先定义一个general的类,然后node和leaf都是那个类的子类
回复

使用道具 举报

rwalle 2020-1-22 22:32:32 | 显示全部楼层
本楼: 👍   100% (2)
 
 
0% (0)   👎
全局: 👍   91% (1326)
 
 
8% (124)    👎
enthusiastic 发表于 2020-1-22 04:19
python不是有private吗?在变量前面加__就可以了?

这只是一种convention,没有任何约束力的,在外面一样能访问(除非你用某些特殊trick)。这和你写一个private int x然后外面访问x,编译器直接报错完全不一样
回复

使用道具 举报

derekdb 2020-1-17 02:44:22 来自APP | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   100% (10)
 
 
0% (0)    👎
Leaf 就是左右子树为空的node
回复

使用道具 举报

jshalyf 2020-1-16 23:58:54 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (22)
 
 
4% (1)    👎
回复

使用道具 举报

yiliaobailiao 2020-1-17 02:44:44 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   92% (634)
 
 
7% (48)    👎
可以考虑用typing来限定传入的类型
回复

使用道具 举报

onefly 2020-1-20 12:40:19 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (149)
 
 
1% (3)    👎
在一个连 private 和 typed array 都没有的语言里寻求 type contract 感觉有点缘木求鱼啊。最接近的就是使用 type hints 了,但是也只是 hints 而已,解释器本身不会做检查的。。
回复

使用道具 举报

enthusiastic 2020-1-22 17:19:18 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (3)
 
 
0% (0)    👎
onefly 发表于 2020-1-20 12:40
在一个连 private 和 typed array 都没有的语言里寻求 type contract 感觉有点缘木求鱼啊。最接近的就是使 ...

python不是有private吗?在变量前面加__就可以了?
回复

使用道具 举报

redemptionnuo 2020-1-23 04:18:11 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   96% (327)
 
 
3% (11)    👎
本帖最后由 redemptionnuo 于 2020-1-22 13:20 编辑

Python  简洁的原因之一就是所有的variable 都是object。

Leaf 不就是一个Node么?没有assign的话,就是None,所以检查leaf就是 left is None and right is None
回复

使用道具 举报

enthusiastic 2020-1-24 15:31:40 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (3)
 
 
0% (0)    👎
rwalle 发表于 2020-1-22 22:32
这只是一种convention,没有任何约束力的,在外面一样能访问(除非你用某些特殊trick)。这和你写一个pri ...

噢原来是这样啊,懂了!谢谢!
回复

使用道具 举报

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

本版积分规则

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