class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def traversal(node):
if node:
yield from traversal(node.left)
yield node.val
yield from traversal(node.right)
其实也是最近几个月在每天都刷一两道 leetcode 题目.
后来某某某给我了段新的代码.
data Tree a
= Branch a (Tree a) (Tree a)
| Tip
treeToList :: Tree a -> [a]
treeToList Tip = []
treeToList (Branch x l r) = treeToList l ++ [x] ++ treeToList r
1
Perry 2018-10-07 08:04:24 +08:00 via iPhone
就一个最基础的 inorder traversal 需要分享吗...
|
3
mysticzt123 2018-10-07 08:20:06 +08:00
这是 leetcode 上别人的答案吧 去年刷题的时候好像见过
|
4
ltoddy OP @mysticzt123 那看来有共鸣了.(窃喜
|
5
bucky 2018-10-07 08:31:17 +08:00
中序,递归,yield
|
6
qile1 2018-10-07 08:47:16 +08:00 via Android
看不懂,上面那个类是干啥的,好像没有引用
|
7
lhx2008 2018-10-07 08:49:27 +08:00 via Android
不过是语法糖而已。。排序直接 sort 不也美哉
|
8
AnyISalIn 2018-10-07 08:52:39 +08:00
就是递归啊。生成器的语法糖而已
|
11
Raisu 2018-10-07 10:27:12 +08:00 via Android
。。。。这
|
12
Mitt 2018-10-07 10:30:06 +08:00 via iPhone 1
这也需要拿出来分享,你是在黑 pythoner 吗
|
14
sww4718168 2018-10-07 10:58:27 +08:00
`yield from` 真是让我们省了好多好多代码。
|
15
carlclone 2018-10-07 11:38:10 +08:00
....
|
16
zpxshl 2018-10-07 11:56:05 +08:00 via Android
........
|
17
d18 2018-10-07 14:36:38 +08:00
楼主不是计算机专业吧,这是数据结构基础了。
|
19
mathzhaoliang 2018-10-07 15:08:44 +08:00
@Mitt 楼主的本意是推销 repo ... 等广告打够了就要放公众号和打赏二维码了 ...
|
20
d18 2018-10-07 15:16:59 +08:00
我错了,原来楼主你是来推销自己的 GitHub 的
|
21
plantom03 2018-10-07 15:23:43 +08:00 via iPhone
...
|
22
20015jjw 2018-10-07 15:23:46 +08:00 via Android
这种秀操作的挺好
只是在实际操作 /面试的时候 100%没人这么写 写了也得改 iterative |
23
pricelessLucky 2018-10-07 16:06:30 +08:00
……???
|
24
yanzixuan 2018-10-07 16:07:20 +08:00
写不了这个,因为我还在用 2.7。手动斜眼
|
25
Mitt 2018-10-07 20:19:16 +08:00 via iPhone
@ltoddy .... 别把 你还没搞清楚 python pythonista pythoner 的区别么
|
26
zhangZMZ 2018-10-07 20:32:37 +08:00
如果用平 php 的话,一个函数搞定?
getToTrees($data); 世界上最美的语言===PHP 我这么说可以你不能说,因为我是 PHPER 哈哈 |
27
zhangZMZ 2018-10-07 20:35:41 +08:00
话说 python 不也是内部封的函数调用吗?手动滑稽
|
28
webdisk 2018-10-07 21:41:34 +08:00
这种递归的情况, 实际运行时 python 能把它展开么
|
29
JerryCha 2018-10-08 02:13:22 +08:00
有没有 C 的呀 (滑稽)
|
30
loqixh 2018-10-08 16:55:54 +08:00
我有一个问题, 为什么可以这么? 明显 traversal 和 node.val 类型不一样啊?
从对应 c#代码可以看出 '' class TreeNode<T> { public T val; public TreeNode<T> left; public TreeNode<T> right; public TreeNode(T val) { this.val = val; } public IEnumerable<T> traversal() { foreach (var val in left.traversal()) { yield return val; } yield return val; foreach (var val in right.traversal()) { yield return val; } } } '' |