• 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]
    
  • 相关阅读:
    Vue.js 学习报告
    Javascript 巩固:阮一峰javascript教程 (2017-1-17)
    2017-1-17
    my-Life项目开发流程-02
    《Javascript 权威指南 第六版》
    2017-1-11
    2017-1-10
    2017-1-9
    前端知识解惑: 响应式 兼容性 不错的知识链接
    2017-1-3
  • 原文地址:https://www.cnblogs.com/liutongqing/p/7698429.html
Copyright © 2020-2023  润新知