一、二叉树是什么
用官方的话来说
树是一种重要的非线性数据结构
直观地说,它是由分支关系组织的数据元素的结构。二叉树是每个节点最多有两个子树的有序树。通常,子树的根被称为“左子树”和“右子树”。二叉树通常用作二叉搜索树、二叉堆或二叉排序树。二叉树的每个节点最多只能有两个子树。二叉树可以是左或右,并且顺序不能颠倒。
二、二叉树相关的题目
2、某二叉树中有15个度为1的结点,16个度为2的结点,则该二叉树中总的结点数为()。
A.32
B.46
C.48
D.49
【题目解析】
树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。由16个度为2的结点可知叶子结点个数为17,则结点结点总数为16+17+15=48,所以选C。
三、二叉树遍历手工算法
假设有如下二叉树,写出它的前中后序
二叉树的前序口诀根左右
结果:A B D H E I C F G
二叉树的中序口诀左根右
结果:H D B I E A F C G
二叉树的后序口诀左右根
结果:H D I E B F G C A
最后记住一句口诀就行了
前序遍历根左右(前就是根在前,左右在后面)
中序遍历左根右(中就是根在中间,左右在旁)
后序遍历左右根(因为有后,就是根在后面,那左右就在前面了
继承 :什么是什么的关系
单继承:*****
1、先抽象再继承,几个类之间的相同代码抽象出来成为父类
2、子类自己没有名字就可以使用父类的方法和属性
3、如果子类有的话,一定是先用自己的
4、在类中使用self的时候,一定要看清楚self指向谁
多继承:***
1、分为新式类和经典类:
#多继承寻找名字的顺序是:新式类广度优先,经典类深度优先
#新式类中 有一个类名.mro方法,查看广度优先的继承顺序
#Python3中 有一个super方法,根据广度优先的继承顺序查找上一个类
'''
关键点就是拓展了super的使用方法
'''
class Animal:
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp
def eat(self):
print('animal is eating')
class Dog(Animal):
# def __init__(self,name,aggr,hp,kind):
# Animal.__init__(self,name,aggr,hp)
# self.kind = kind #派生属性
'''python3中特有的super方法,意思就是找我的父类'''
def __init__(self,name,aggr,hp,kind):
super().__init__(name,aggr,hp)
self.kind = kind
def eat(self): #如果既想实现新的功能也想使用父类原本的功能,还需要在子类中再调用父类
print('dog is eating')
def bite(self,person): #派生方法
person.hp -= self.aggr
jin = Dog('旺财',100,500,'泰迪')
print(jin.name)
jin.eat()
找父类中的eat方法不找自己的,在父类中找不到就报错即使自己有
super(Dog,jin).eat()