def CreateBTree2(posts,ins): #由后序序列posts和中序序列ins构造二叉链 bt=BTree() bt.b=_CreateBTree2(posts,0,ins,0,len(posts)) return bt def _CreateBTree2(posts,i,ins,j,n): if n<=0: return None d=posts[i+n-1] #取后序序列尾元素d t=BTNode(d) #创建根结点(结点值为d) p=ins.index(d) #在ins中找到根结点的索引 k=p-j #确定左子树中结点个数k t.lchild=_CreateBTree2(posts,i,ins,j,k) #递归构造左子树 t.rchild=_CreateBTree2(posts,i+k,ins,p+1,n-k-1) #递归构造右子树 return t #主程序 ins=['D','G','B','A','E','C','F'] posts=['G','D','B','E','F','C','A'] print() print(" 中序:",end=' '); print(ins) print(" 后序:",end=' '); print(posts) print(" 构造二叉树bt") bt=BTree() bt=CreateBTree2(posts,ins) print(" bt:",end=' '); print(bt.DispBTree()) x='X' p=bt.FindNode(x) if p!=None: print(" bt中存在"+x) else: print(" bt中不存在"+x) print(" bt的高度=%d" %(bt.Height())) print(" 先序序列:",end=' ');PreOrder(bt);print() print(" 中序序列:",end=' ');InOrder(bt);print() print(" 后序序列:",end=' ');PostOrder(bt);print() print(" 层次序列:",end=' ');LevelOrder(bt);print()
时间: 2024-01-13 21:04:22 浏览: 82
这段代码是实现了根据中序序列和后序序列构造二叉树,并且实现了二叉树的遍历和查找操作。但是缺少了相关函数的实现,我来补充一下:
```
class BTNode: #二叉链表结点类
def __init__(self):
self.data=None
self.lchild=None
self.rchild=None
def __init__(self,data=None,lchild=None,rchild=None):
self.data=data
self.lchild=lchild
self.rchild=rchild
class BTree: #二叉链表类
def __init__(self):
self.b=None
def DispBTree(self): #输出二叉树,按照括号表示法输出
return DispBTree(self.b)
def Height(self): #求二叉树高度
return Height(self.b)
def FindNode(self,x): #查找值为x的结点
return FindNode(self.b,x)
def DispBTree(t): #输出二叉树,按照括号表示法输出
if t==None: return '^' #空树用^表示
s=str(t.data) #根结点的值
if t.lchild!=None or t.rchild!=None: #非叶结点
s+='('+DispBTree(t.lchild)+','+DispBTree(t.rchild)+')'
return s
def Height(t): #求二叉树高度
if t==None: return 0 #空树高度为0
lh=Height(t.lchild) #求左子树高度
rh=Height(t.rchild) #求右子树高度
return max(lh,rh)+1 #返回左右子树高度的最大值加1
def FindNode(t,x): #查找值为x的结点
if t==None: return None #空树返回None
if t.data==x: return t #找到了返回结点t
p=FindNode(t.lchild,x) #在左子树中查找
if p!=None: return p
return FindNode(t.rchild,x) #在右子树中查找
```
这些函数应该是这段代码所需要的。如果您有其他问题,可以继续提出。
阅读全文