今天再分享一段代码( Python 二叉树遍历)

2018-10-07 07:42:14 +08:00
 ltoddy
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 题目.

https://github.com/ltoddy/leetcode

5291 次点击
所在节点    Python
31 条回复
plantom03
2018-10-07 15:23:43 +08:00
...
20015jjw
2018-10-07 15:23:46 +08:00
这种秀操作的挺好
只是在实际操作 /面试的时候 100%没人这么写 写了也得改 iterative
pricelessLucky
2018-10-07 16:06:30 +08:00
……???
yanzixuan
2018-10-07 16:07:20 +08:00
写不了这个,因为我还在用 2.7。手动斜眼
Mitt
2018-10-07 20:19:16 +08:00
@ltoddy .... 别把 你还没搞清楚 python pythonista pythoner 的区别么
zhangZMZ
2018-10-07 20:32:37 +08:00
如果用平 php 的话,一个函数搞定?
getToTrees($data);

世界上最美的语言===PHP




























我这么说可以你不能说,因为我是 PHPER
哈哈
zhangZMZ
2018-10-07 20:35:41 +08:00
话说 python 不也是内部封的函数调用吗?手动滑稽
webdisk
2018-10-07 21:41:34 +08:00
这种递归的情况, 实际运行时 python 能把它展开么
JerryCha
2018-10-08 02:13:22 +08:00
有没有 C 的呀 (滑稽)
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;
}
}
}
''
ltoddy
2018-10-08 18:30:36 +08:00
@loqixh 可迭代与迭代器不同,迭代器可迭代,但是可迭代不一定就是迭代器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/495275

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX