一亩三分地

 找回密码 注册账号

扫描二维码登录本站


北美版丁香园
美国和加拿大
疫情地图实时动态追踪

热门职场讲座
Career in Tech
职场晋升之路

Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 1785|回复: 9
收起左侧

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

[复制链接] |试试Instant~ |树/链表/图, 刷题
我的人缘0

分享帖子到朋友圈
dcclogin | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (106)
 
 
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的网站推荐吗,谢谢!
我的人缘0
本楼: 👍   100% (3)
 
 
0% (0)   👎
全局: 👍   88% (3304)
 
 
11% (414)    👎
虽然感觉不用给node和leaf分开两个类(node也要有val的呀,leaf就是left和right都为none的node)

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

使用道具 举报

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

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

使用道具 举报

我的人缘0
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   100% (2)
 
 
0% (0)    👎
Leaf 就是左右子树为空的node
回复

使用道具 举报

我的人缘0
jshalyf 2020-1-16 23:58:54 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   92% (12)
 
 
7% (1)    👎
回复

使用道具 举报

我的人缘0
yiliaobailiao 2020-1-17 02:44:44 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   93% (193)
 
 
6% (13)    👎
可以考虑用typing来限定传入的类型
回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

我的人缘0
redemptionnuo 2020-1-23 04:18:11 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (222)
 
 
4% (11)    👎
本帖最后由 redemptionnuo 于 2020-1-22 13:20 编辑

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

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

使用道具 举报

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

GMT+8, 2020-2-22 08:50

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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