美文网首页
用对象的思想创建二叉树并实现四种遍历-python版

用对象的思想创建二叉树并实现四种遍历-python版

作者: HelloSunPing | 来源:发表于2017-08-10 22:32 被阅读104次

直接上代码:

#coding:utf-8

class Node(object):
    """二叉树节点"""

    def __init__(self, item):
        super(Node, self).__init__()
        self.item = item
        self.lchild = None
        self.rchild = None


class Tree(object):
    """二叉树类"""

    def __init__(self):
        super(Tree, self).__init__()
        self.root = None

    def add(self, item):
        """添加节点"""
        node = Node(item)
        # 判断当前树是否为空
        if self.root is None:
            self.root = node
        else:
            queue = []
            queue.append(self.root)
            # 采用队列存放, 先将根节点放入队列中,取出,看是否有左子树和右子树,有就放入并且循环回来看子树的子树,没有则添加
            while queue:
                temp = queue.pop(0)
                # 看做节点是否为空
                if temp.lchild is None:
                    temp.lchild = node
                    break
                # 看右节点是否为空
                elif temp.rchild is None:
                    temp.rchild = node
                    break
                # 都不为空,将左节点和右节点放入队列
                else:
                    queue.append(temp.lchild)
                    queue.append(temp.rchild)

    def wide_travel(self):
        """广度优先遍历(广序遍历):从上到下,从左到右.利用队列"""
        if self.root is None:
            return
        else:
            queue = []
            queue.append(self.root)
            while queue:
                temp = queue.pop(0)
                print(temp.item, end=" ")
                # 如果有左孩子则放入队列
                if temp.lchild is not None:
                    queue.append(temp.lchild)
                # 如果有右孩子则放入队列
                if temp.rchild is not None:
                    queue.append(temp.rchild)
            print()

    # 深度遍历采用了递归
    def preorder(self, node):
        """深度遍历-先序遍历(根节点-左子树-右子树)"""
        if node is None:
            return
        print(node.item, end=" ")
        self.preorder(node.lchild)
        self.preorder(node.rchild)

    def inorder(self, node):
        """深度遍历-中序遍历(左子树-根节点-右子树)"""
        if node is None:
            return
        self.inorder(node.lchild)
        print(node.item, end=" ")
        self.inorder(node.rchild)

    def posorder(self, node):
        """深度遍历-后序遍历(左子树-右子树-根节点)"""
        if node is None:
            return
        self.posorder(node.lchild)
        self.posorder(node.rchild)
        print(node.item, end=" ")


if __name__ == '__main__':
    tree = Tree()
    for char in "ABCDEFG":
        tree.add(char)
    print("先序遍历:")
    tree.preorder(tree.root)
    print("\n中序遍历:")
    tree.inorder(tree.root)
    print("\n后序遍历:")
    tree.posorder(tree.root)
    print("\n广度遍历:")
    tree.wide_travel()

欢迎一起分享和交流python---->q群:556993881

相关文章

  • 用对象的思想创建二叉树并实现四种遍历-python版

    直接上代码: #coding:utf-8 欢迎一起分享和交流python---->q群:556993881

  • 二叉树三种遍历的递归和非递归实现&层次遍历实现(C++)

    对于二叉树的三种遍历方式(先序、中序、后序),用递归和非递归(栈)的方式实现,对于后序遍历用队列实现。 四种遍历方...

  • 二叉树的创建和遍历

    二叉树的创建和遍历 如图所示的二叉树,我们用C++来实现其创建和...

  • 二叉树的遍历

    二叉树的遍历 二叉树常用的遍历方式有:前序遍历、中序遍历、后序遍历、层序遍历四种遍历方式,不同的遍历算法,其思想略...

  • 二叉树前序、中序、后序遍历(递归)

    二叉树遍历,递归法 Python 3 实现:

  • 递增顺序查找树

    题目: 题目的理解: 中序遍历二叉树,获取到的值来创建TreeNode。 python实现 提交 // END 多...

  • 数据结构之二叉树2

    二叉树的创建 二叉树的创建用到了辅助队列,通过辅助队列来创建二叉树; 二叉树的遍历 前(先)序遍历 1、递归实现 ...

  • 算法之二叉树

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

  • 2018-11-19

    今天在电脑上用c语言实现了二叉树的创建,并且采用递归算法的形式进行二叉树的先序遍历和中序遍历以及后序遍历。

  • 记一次Tree的遍历

    统计利用先序遍历创建的二叉树的深度 利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方...

网友评论

      本文标题:用对象的思想创建二叉树并实现四种遍历-python版

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