树形结构是一类非常重要的非线性数据结构,其中树和二叉树最为常用。
二叉树的特点是每个节点至多只有两棵子树,且二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树的性质:
性质 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