推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› 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
ltoddy
V2EX  ›  Python

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

  •  
  •   ltoddy ·
    ltoddy · Oct 7, 2018 · 7228 views
    This topic created in 2949 days ago, the information mentioned may be changed or developed.
    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

    Supplement 1  ·  Oct 7, 2018

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

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

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




























    我这么说可以你不能说,因为我是 PHPER
    哈哈
    zhangZMZ
    zhangZMZ
    Oct 7, 2018
    27
    话说 python 不也是内部封的函数调用吗?手动滑稽
    webdisk
    webdisk
    Oct 7, 2018
    28
    这种递归的情况, 实际运行时 python 能把它展开么
    JerryCha
    JerryCha
    Oct 8, 2018
    29
    有没有 C 的呀 (滑稽)
    loqixh
    loqixh
    Oct 8, 2018
    30
    我有一个问题, 为什么可以这么? 明显 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
    ltoddy
    OP
    Oct 8, 2018 via Android
    31
    @loqixh 可迭代与迭代器不同,迭代器可迭代,但是可迭代不一定就是迭代器。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1310 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    ♥ Do have faith in what you're doing.