1.度:
节点的度:某个节点的子节点个数
树的度:节点最大的度数
2.二叉树:最多有两颗子树:左子树、右子树
满二叉树:除最后一层没有子节点外。其余每一层的所有节点都有两个子节点
完全二叉树:在深度为d的二叉树中,除了第d层,其他各层节点数均为2
满二叉树和完全二叉树区别:完全二叉树可允许在中间层包含叶子节点,满二叉树只允许最后一层为叶子节点
3.二叉树的遍历
主要区别:访问根节点的顺序
① 前序遍历:访问根节点-前序遍历左子树-前序遍历右子树:A-B-D-E-C
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9e9ebb01561f98908a05600bc06cdf7f.png)
#定义一个树
class aTree(object):
def __init__(self,data=None,left=None,right=None):
self.data=data
self.left=left
self.right=right
#前序遍历
def preorder(self):
if self.data is not None:#访问根节点
print(self.data,end=' ')
if self.left is not None:#遍历左子树
self.left.preorder()
if self.right is not None:#遍历右子树
self.right.preorder()
#搞一颗实际的树
left_tree=aTree('B')
left_tree.left=aTree('D')
left_tree.right=aTree('E')#定义了左子树
right_tree=aTree('C')
right_tree.left=aTree('F')
right_tree.right=aTree('G')#定义了右子树
tree=aTree('A')
tree.left=left_tree
tree.right=right_tree#定义根节点
print(tree.preorder())
>>A B D E C F G None
中序、后序遍历就是将下面这几段交换位置即可,其他均相同:
if self.data is not None:
print(self.data,end=’ ')
if self.left is not None:
self.left.preorder( )
if self.right is not None:
self.right.preorder( )
② 中序遍历:遍历根节点的左子树-访问根节点-遍历右子树: D-B-E-A-C
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b98b0c88cdfe1abd60d7ed119e046c9a.png)
③ 后序遍历:从左到右先叶子后节点方式遍历左右子树-访问根节点:D-E-B-C-A
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a00fb805039c3293e323007c905f5281.png)
④ 层次遍历:从根节点从上到下逐层遍历,同一层中,从左到右访问各节点:A-B-C-D-E
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ef7e210d56dfca31d9ed49cfce3caf64.png)