二叉树
二叉树是树的一种,它的特点是每个结点最多有俩个子树,并且子树有左右之分,其次序不能颠倒。
二叉树的性质:
性质1:在二叉树的第i层上最多有2^i-1个结点。(i>=1)
性质2深度为k的二叉树最多有2^k - 1个结点。(k>=1)
性质3:对于任何一个二叉树T,如果其终端结点数为n0,度为2的结点为n2则 n0=n2+1
性质4:具有n个结点的完全二叉树的深度为| log2 n | + 1
python代码实现
class BinaryTree(object):
def __init__(self, value):
self.__left = None
self.__right = None
self.__data = value
# 创建左子树
def insertLeftChild(self, value):
if self.__left:
print("左子树已经存在")
else:
self.__left = BinaryTree(value)
return self.__left
# 创建右子树
def insertrRightChild(self, value):
if self.__right:
print("右子树已经存在")
else:
self.__right = BinaryTree(value)
return self.__right
def show(self):
print(self.__data)
# 前序遍历
def preOrder(self):
# 输出根节点
print(self.__data, end = ' ')
# 先遍历左子树
if self.__left:
self.__left.preOrder()
if self.__right:
self.__right.preOrder()
# 后序遍历
def postOrder(self):
if self.__left:
self.__left.postOrder()
if self.__right:
self.__right.postOrder()
print(self.__data, end = ' ')
# 中序遍历
def inOrder(self):
if self.__left:
self.__left.inOrder()
print(self.__data,end=' ')
if self.__right:
self.__right.inOrder()
if __name__ == "__main__":
root = BinaryTree("D")
e = root.insertrRightChild("E")
b = root.insertLeftChild("B")
a = b.insertLeftChild("A")
c = b.insertrRightChild("C")
g = e.insertrRightChild("G")
f = g.insertLeftChild("F")
print("前序遍历为")
root.preOrder()
print("\n")
print("后序遍历为")
root.postOrder()
print("\n")
print("中序遍历为")
root.inOrder()