#二叉树采用链式存储结构,设计一个算法输出值为x的结点的所有祖先结点
#思路:不就是检验一个结点下面是否有值为x的结点吗,一般就是看其左孩子结点是否值为x,如果是,把这个结点的值放进存储列表
#如果不是,检验右孩子结点,如果左孩子右孩子结点都不是,那么左右孩子的孩子结点则进入判断如果有一个有值为x的结点,那么还是把这个结点存入存储列表
def Ancestor1(bt,x):
res=[]#存储列表
_Ancestor1(bt.b,x,res)
res.reverse()#因为递归从树的最下方往上依次运行,先进入列表的是树的下方的结点,所以最后反过来一下,祖先结点从上往下排
return res
def _Ancestor1(t,x,res):
if t==None:
return False
if t.child!=None and t.child.data==x:
res.append(t.data)
return True
if t.child!=None and t.child.data==x:
res.append(t.data)
return True
if _Ancestor1(t.lchild,x,res) or _Ancestor1(t.rchild,x,res):#这里是判断语句里面有递归,相当于开始求值的时候还是从树的最下方往上依次运行
res.append(t.data)
return True
return False