#链式存储二叉树,设计一个算法按从左到右的顺序输出一个二叉树的所有叶子结点值
#建立在输出二叉树的所有结点的算法的基础上,输出叶子结点首先要去访问每一个结点,然后如果是叶子结点的话就输出,
#不用去管是否是从左到右输出,因为递归访问本身就是先左后右的
#判断链式存储结构中结点是否为叶子结点:这个结点的lchild与rchild域都为空
#链式存储二叉树,设计一个算法按从左到右的顺序输出一个二叉树的所有叶子结点值
#建立在输出二叉树的所有结点的算法的基础上,输出叶子结点首先要去访问每一个结点,然后如果是叶子结点的话就输出,
#不用去管是否是从左到右输出,因为递归访问本身就是先左后右的
#判断链式存储结构中结点是否为叶子结点:这个结点的lchild与rchild域都为空
def Displeaf1(bt):#以先序遍历为例
#当操作二叉树的时候,有上下两段代码,第一段的代码的原因是一般引用一棵树,这棵树会有一个名字,但我们操作二叉树的代码时通常以结点的指针作为操作对象,所以做一个中间商转换
_Displeaf1(bt.b)#bt.b就是一个转换
def _Displeaf1(t):
if t!=None:#遍历每一个结点,只要不空就继续访问每一个结点
if t.lchild==None and t.rchild==None:#判断是否为叶子结点
print(t.data,end='')
_Displeaf1(t.lchild)#遍历左孩子结点
_Displeaf1(t.rchild)#遍历右孩子结点
#或者用递归的思想(尽管我认为这个并不能多好的体现递归思想)
#遇到一个结点,如果是叶子结点就输出(之后返回上一层递归),如果不是叶子结点,就去访问结点的左子树右子树
def Displeaf4(bt):
_Displeaf4(bt.b)
def _Displeaf4(t):
if t!=None:#遍历每一个结点,只要不空就继续访问每一个结点
if t.lchild==None and t.rchild==None:#判断是否为叶子结点
print(t.data,end='')
else:
_Displeaf4(t.lchild)#遍历左孩子结点
_Displeaf4(t.rchild)#遍历右孩子结点