二叉树及二叉树的Python实现

树形结构是一类非常重要的非线性数据结构,其中树和二叉树最为常用。

二叉树的特点是每个节点至多只有两棵子树,且二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的性质:

性质 1. 在二叉树的第层上至多有个结点

性质 2. 深度为的二叉树至多有个结点,

性质 3. 对任何一个二叉树,如果其终端结点数为,度为2的结点数为,则

一棵深度为且有个结点的二叉树称为满二叉树。深度为的,有个结点的二叉树,当且仅当其每一个结点都与深度为的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树

完全二叉树的特点:(1)叶子结点只可能在层次最大的两层上出现;(2)对任一结点,若其右分支下的子孙的最大层次为,则其左分支下的子孙的最大层次必为

性质 4. 具有个结点的完全二叉树的深度为

二叉树的实现

class Node:
    def __init__(self,data):
        self.data = data
        self.lchild = None
        self.rchild = None
class BinaryTree:
    def __init__(self):
        self.root = None

    # 创建二叉树
    def CreatBiTree(self,node):
        self.root = node
    # 销毁二叉树
    def DestroyBiTree(self):
        self.root = None
    # 清空二叉树
    def ClearBiTree(self):
        self.root.lchild = None
        self.root.rchild = None
    # 判断二叉树是否为空
    def BiTreeEmpty(self):
        if self.root == None:
            return False
        return True
    
    # 先序遍历二叉树
    def PreOrderTraverse(self,root):
        self.root = root
        if self.root == None:
            return False

        if root:
            print('{} -> '.format(root.data),end = '')
            self.PreOrderTraverse(root.lchild)
            self.PreOrderTraverse(root.rchild)

    # 中序遍历二叉树
    def InOrderTraverse(self,root):

        if root:
            self.InOrderTraverse(root.lchild)
            print('{} -> '.format(root.data), end='')
            self.InOrderTraverse(root.rchild)
    # 后序遍历二叉树
    def PostOrderTraverse(self,root):
        if root:
            self.PostOrderTraverse(root.lchild)
            self.PostOrderTraverse(root.rchild)
            print('{} -> '.format(root.data), end='')
    # 层序遍历二叉树
    def LevelOrderTraverse(self):
        pass


猜你喜欢

转载自blog.csdn.net/kevin_pei/article/details/80011727