zoukankan      html  css  js  c++  java
  • python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    树是(n)(nge 0))个结点的有限集。在任意一棵非空树中,有且只有一个根结点。

    二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。

    • 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
    • 二叉树的第i层至多有2^{i-1}个结点
    • 深度为k的二叉树至多有2^k-1个结点;
    • 对任何一棵二叉树T,如果其终端结点数为N0,度为2的结点数为N2,则N0=N2+1

    例子

    实现以下二叉树,并进行先序遍历、中序遍历和后序遍历。

    class BinaryTreeNode(object):
        def __init__(self, data=None, left=None, right=None):
            self.data = data
            self.left = left
            self.right = right
    
    class BinaryTree(object):
        def __init__(self, root=None):
            self.root = root
    
        def is_empty(self):
            return self.root == None
    
        def preOrder(self,BinaryTreeNode):
            if BinaryTreeNode == None:
                return
            # 先打印根结点,再打印左结点,后打印右结点
            print(BinaryTreeNode.data)
            self.preOrder(BinaryTreeNode.left)
            self.preOrder(BinaryTreeNode.right)
    
        def inOrder(self,BinaryTreeNode):
            if BinaryTreeNode == None:
                return
            # 先打印左结点,再打印根结点,后打印右结点
            self.inOrder(BinaryTreeNode.left)
            print(BinaryTreeNode.data)
            self.inOrder(BinaryTreeNode.right)
    
        def postOrder(self,BinaryTreeNode):
            if BinaryTreeNode == None:
                return
            # 先打印左结点,再打印右结点,后打印根结点
            self.postOrder(BinaryTreeNode.left)
            self.postOrder(BinaryTreeNode.right)
            print(BinaryTreeNode.data)
    
    n1 = BinaryTreeNode(data="D")
    n2 = BinaryTreeNode(data="E")
    n3 = BinaryTreeNode(data="F")
    n4 = BinaryTreeNode(data="B", left=n1, right=n2)
    n5 = BinaryTreeNode(data="C", left=n3, right=None)
    root = BinaryTreeNode(data="A", left=n4, right=n5)
    
    bt = BinaryTree(root)
    print('先序遍历')
    bt.preOrder(bt.root)
    print('中序遍历')
    bt.inOrder(bt.root)
    print('后序遍历')
    bt.postOrder(bt.root)
    

    程序运行结果:

    先序遍历
    A
    B
    D
    E
    C
    F
    中序遍历
    D
    B
    E
    A
    F
    C
    后序遍历
    D
    E
    B
    F
    C
    A
    [Finished in 0.1s]
    
  • 相关阅读:
    .net序列化和反序列化(一)——自动序列化
    在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句
    使用JQuery与iframe交互
    FCKeditor自定义工具栏和定义多个工具栏
    FCKeditor自定义非空验证
    PHP5.3.6的IIS配置
    Linux下缓存服务器的应用
    PHP采集程序中常用的函数
    关于PHP5.3.x和Zend Optimizer(Zend Guard Loader),以及shopex4.8.5安装的问题
    SQLserver数据库还原出现错误112(磁盘空间不足)的解决办法
  • 原文地址:https://www.cnblogs.com/liutongqing/p/7698429.html
Copyright © 2011-2022 走看看