首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

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

  •  
  •   ltoddy · 138 天前 · 3117 次点击
    这是一个创建于 138 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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

    第 1 条附言  ·  137 天前

    后来某某某给我了段新的代码.

    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
    
    31 回复  |  直到 2018-10-08 18:30:36 +08:00
        1
    Perry   138 天前 via iPhone
    就一个最基础的 inorder traversal 需要分享吗...
        2
    ltoddy   138 天前
    @Perry 可是,如果是你写个遍历,会这么简洁的写出来吗?
        3
    mysticzt123   138 天前
    这是 leetcode 上别人的答案吧 去年刷题的时候好像见过
        4
    ltoddy   138 天前
    @mysticzt123 那看来有共鸣了.(窃喜
        5
    bucky   138 天前
    中序,递归,yield
        6
    qile1   138 天前 via Android
    看不懂,上面那个类是干啥的,好像没有引用
        7
    lhx2008   138 天前 via Android
    不过是语法糖而已。。排序直接 sort 不也美哉
        8
    AnyISalIn   138 天前
    就是递归啊。生成器的语法糖而已
        9
    ltoddy   138 天前 via Android
    @lhx2008 按你的说法应该用 bisect 吧。
        10
    ltoddy   138 天前
    @lhx2008 按你的说法,应该是用 bisect 把?
        11
    Raisu   138 天前 via Android
    。。。。这
        12
    Mitt   138 天前 via iPhone   ♥ 1
    这也需要拿出来分享,你是在黑 pythoner 吗
        13
    ltoddy   138 天前
    @Mitt 还好 Python 程序员叫 pythonista.
        14
    sww4718168   138 天前
    `yield from` 真是让我们省了好多好多代码。
        15
    carlclone   138 天前
    ....
        16
    zpxshl   138 天前 via Android
    ........
        17
    d18   138 天前
    楼主不是计算机专业吧,这是数据结构基础了。
        18
    sudoz   138 天前
    @ltoddy 你所谓的『简洁』不是算法的简洁,只是 Python 语法额外赠送的『简洁』
        19
    mathzhaoliang   138 天前
    @Mitt 楼主的本意是推销 repo ... 等广告打够了就要放公众号和打赏二维码了 ...
        20
    d18   138 天前
    我错了,原来楼主你是来推销自己的 GitHub 的
        21
    plantom03   138 天前 via iPhone
    ...
        22
    20015jjw   138 天前 via Android
    这种秀操作的挺好
    只是在实际操作 /面试的时候 100%没人这么写 写了也得改 iterative
        23
    pricelessLucky   138 天前
    ……???
        24
    yanzixuan   138 天前
    写不了这个,因为我还在用 2.7。手动斜眼
        25
    Mitt   137 天前 via iPhone
    @ltoddy .... 别把 你还没搞清楚 python pythonista pythoner 的区别么
        26
    zhangZMZ   137 天前
    如果用平 php 的话,一个函数搞定?
    getToTrees($data);

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




























    我这么说可以你不能说,因为我是 PHPER
    哈哈
        27
    zhangZMZ   137 天前
    话说 python 不也是内部封的函数调用吗?手动滑稽
        28
    webdisk   137 天前
    这种递归的情况, 实际运行时 python 能把它展开么
        29
    JerryCha   137 天前
    有没有 C 的呀 (滑稽)
        30
    loqixh   136 天前
    我有一个问题, 为什么可以这么? 明显 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;
    }
    }
    }
    ''
        31
    ltoddy   136 天前 via Android
    @loqixh 可迭代与迭代器不同,迭代器可迭代,但是可迭代不一定就是迭代器。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3934 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 08:39 · PVG 16:39 · LAX 00:39 · JFK 03:39
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1