【数据结构】——树:二叉树的遍历

1.度

  节点的度:某个节点的子节点个数
  树的度:节点最大的度数

2.二叉树:最多有两颗子树:左子树、右子树

  满二叉树:除最后一层没有子节点外。其余每一层的所有节点都有两个子节点

  完全二叉树:在深度为d的二叉树中,除了第d层,其他各层节点数均为2

  满二叉树和完全二叉树区别:完全二叉树可允许在中间层包含叶子节点,满二叉树只允许最后一层为叶子节点

3.二叉树的遍历

  主要区别:访问根节点的顺序

前序遍历:访问根节点-前序遍历左子树-前序遍历右子树:A-B-D-E-C


在这里插入图片描述

#定义一个树
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

在这里插入图片描述

后序遍历:从左到右先叶子后节点方式遍历左右子树-访问根节点:D-E-B-C-A

在这里插入图片描述

层次遍历:从根节点从上到下逐层遍历,同一层中,从左到右访问各节点:A-B-C-D-E

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46568930/article/details/111494233
今日推荐