美文网首页
优雅实现二叉树的中序遍历

优雅实现二叉树的中序遍历

作者: 洛克黄瓜 | 来源:发表于2019-03-19 17:49 被阅读0次

Visitor模式实现

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
    def accept(self, visitor):
        if self.left is not None:
            self.left.accept(visitor)

        visitor.visit(self)

        if self.right is not None:
            self.right.accept(visitor)

class PrintVisitor:
    def visit(self,node):
        print(node.data)

root = TreeNode('1')
root.left = TreeNode('2')
root.right = TreeNode('3')

visitor = PrintVisitor()

root.accept(visitor)   #输出2, 1, 3

iter结合生成器来实现

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

    def __iter__(self):
        return self.__generator()

    def __generator(self):
        if self.left is not None:
            yield from iter(self.left) 
        yield from self.data

        if self.right is not None:
            yield from iter(self.right) 

root = TreeNode('1')
root.left = TreeNode('2')
root.right = TreeNode('3')

for ele in root:
    print(ele)

相关文章

  • 二叉树BinaryTree

    Java 实现二叉树的构造以及遍历过程 二叉树遍历(先序、中序、后序)

  • 二叉树的操作

    /*主要内容:1、实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式*/ 实现二叉树的先序、中序、后序遍历...

  • 【Leetcode】【Python】中序遍历94. Binary

    实现二叉树的中序遍历

  • Java二叉树的遍历

    Java二叉树的遍历 利用递归和非递归实现二叉树的先序,中序,后序遍历以及使用队列实现二叉树的层次遍历

  • 二叉树遍历

    概述 典型的遍历模式:前序遍历、中序遍历、逆序遍历 中序遍历(左根右) 可以实现二叉树的按照大小进行打印 二叉树按...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • 数据结构与算法二叉树的遍历与线索二叉树以及森林

    1.二叉树的遍历先序遍历、中序遍历、后序遍历 2.层次遍历利用队列实现 3.由遍历序列构成二叉树先序、后序可以与众...

  • 二叉树的先序,中序,后序遍历?

    题目描述 二叉树的先序,中序,后序遍历 代码实现

  • 二叉树的递归遍历(java版)

    1. 场景需求 二叉树如图 java中利用递归实现二叉树的各种遍历 前序遍历 中序遍历 后序遍历 3.代码实现 3...

  • 二叉树遍历

    二叉树遍历 二叉树遍历分为先序中序后序,是否递归,实现方法和原理注释都在下方

网友评论

      本文标题:优雅实现二叉树的中序遍历

      本文链接:https://www.haomeiwen.com/subject/oyunmqtx.html