这篇博客介绍二叉树,包括二叉树的基本概念、二叉树的性质以及Python的实现。
我们先来看看什么是二叉树?
二叉树的基本概念
二叉树是每个节点最多有两个子树的结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)
如图所示是一个二叉树。

二叉树的性质
性质1:在二叉树的第iii层上至多有2i−12^{i-1}2i−1个节点(i>0)(i>0)(i>0)
性质2:深度为kkk的二叉树至多有2k−12^k-12k−1个节点(k>0)(k>0)(k>0)
性质3:对于任意一棵二叉树,如果其叶节点数为N0N_0N0,而度数为2的节点总数为N1N_1N1,则N0=N2+1N_0 = N_2 + 1N0=N2+1
性质4:具有nnn个节点的完全二叉树的深度必为log2(n+1)log2(n+1)log2(n+1)
性质5:对完全二叉树,若从上至下、从左至右编号,则编号为iii的节点,其左孩子编号必为2i2i2i,其右孩子编号必为2i+12i+12i+1;其双亲的编号必为i/2i/2i/2 (i=1i=1i=1时为根,除外)
完全二叉树 —— 若设二叉树的高度为hhh,除第hhh层外,其他各层(1~h-1)的节点数都达到最大个数,第hhh层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。

满二叉树—— 除了叶节点外每一个节点都有左右子叶并且叶子节点都处在最底层的二叉树。

二叉树的节点表示以及树的创建
通过使用Node类中定义三个属性,分别为elem本身的值,还有lchild左孩子和rchild右孩子。
class Node(object):
'''节点类'''
def __init__(self, elem = -1, lchild = None, rchild = None):
self.elem = elem
self.lchild = lchild
self.rchild = rchild
树的创建,创建一个树的类,并给一个root根节点,一开始为空,随后添加节点。
class Tree(object):
'''树类'''
def __init__(self, root = None):
self.root = root
def add(self, elem):
'''为树添加节点'''
node = Node(elem)
# 如果树是空的,则对根节点赋值
if self.root == None: self.root = node
else:
queue = []
queue.append(self.root)
# 对已有的节点进行层次遍历
while queue:
# 弹出队列的第一个元素
cur = queue.pop(0)
if cur.lchild == None:
cur.lchild = node
return
elif cur.rchild == None:
cur.rchild = node
return
else:
# 如果左右子树都不为空,加入队列继续判断
queue.append(cur.lchild)
queue.append(cur.rchild)
本文深入解析了二叉树的基本概念、性质及其在Python中的实现方式。介绍了二叉树的定义,包括左子树和右子树,以及二叉树的五种关键性质,如节点数量、深度和编号规律。同时,详细阐述了如何使用Python创建二叉树的节点和树结构。
2365

被折叠的 条评论
为什么被折叠?



