def InOrder(bt): #中序遍历的递归算法 _InOrder(bt.b) def _InOrder(t):
时间: 2024-01-03 08:03:23 浏览: 27
好的,请看下面是补齐后的代码:
```
class BinaryTree:
def __init__(self, value, left_child=None, right_child=None):
self.value = value
self.left_child = left_child
self.right_child = right_child
def InOrder(bt):
# 中序遍历的递归算法
if bt:
InOrder(bt.left_child)
print(bt.value)
InOrder(bt.right_child)
def _InOrder(t):
# 被InOrder方法调用
InOrder(t)
# 以下为测试代码
bt = BinaryTree(1, BinaryTree(2, BinaryTree(4), BinaryTree(5)), BinaryTree(3, BinaryTree(6), BinaryTree(7)))
_InOrder(bt)
```
以上代码实现了一个二叉树的中序遍历算法。其中,`InOrder`方法为中序遍历的递归算法,`_InOrder`方法调用了`InOrder`方法,对外提供了中序遍历的接口。在测试代码中,我们创建了一个具有 7 个节点的二叉树,并调用了`_InOrder`方法进行中序遍历。
相关问题
def Height(self): #求二叉树高度的算法 return self._Height1(self.b) def _Height1(self,t): #被Height方法调用 if t==None: return 0 #空树的高度为0 else: lh=self._Height1(t.lchild) #求左子树高度lchildh rh=self._Height1(t.rchild) #求右子树高度rchildh return max(lh,rh)+1 def PreOrder(bt): #先序遍历的递归算法 _PreOrder(bt.b) def _PreOrder(t): #被PreOrder方法调用 def InOrder(bt): #中序遍历的递归算法 _InOrder(bt.b) def _InOrder(t): #被InOrder方法调用 def PostOrder(bt): #后序遍历的递归算法 _PostOrder(bt.b) def _PostOrder(t): #被PostOrder方法调用 def LevelOrder(bt): #层次遍历的算法 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
这段代码看起来是一个二叉树的实现,其中包含了多种遍历算法和求二叉树高度的算法。具体来说,Height方法是用来求二叉树的高度的,其中_Height1方法被Height方法递归调用,实现了一个标准的二叉树高度求解算法。PreOrder、InOrder、PostOrder和LevelOrder分别是实现了二叉树的先序、中序、后序和层次遍历的算法,其中_PreOrder、_InOrder、_PostOrder和_CreateBTree2分别是被对应遍历算法调用的辅助方法。最后,CreateBTree2方法是用来根据后序遍历序列和中序遍历序列构造出对应的二叉树。如果你有更具体的问题,请继续提出。
补全代码:from collections import deque class BTNode: #二叉链中结点类 def init(self,d=None): #构造方法 …… class BTree: #二叉树类 def init(self,d=None): #构造方法 …… def DispBTree(self): #返回二叉链的括号表示串 …… def _DispBTree1(self,t): #被DispBTree方法调用 …… def FindNode(self,x): #查找值为x的结点算法 …… def _FindNode1(self,t,x): #被FindNode方法调用 ……. def Height(self): #求二叉树高度的算法 …… def _Height1(self,t): #被Height方法调用 …… def PreOrder(bt): #先序遍历的递归算法 ……. def _PreOrder(t): #被PreOrder方法调用 …… def InOrder(bt): #中序遍历的递归算法 …… def _InOrder(t): #被InOrder方法调用 …… def PostOrder(bt): #后序遍历的递归算法 …… def _PostOrder(t): #被PostOrder方法调用 …… def LevelOrder(bt): #层次遍历的算法 …… def CreateBTree2(posts,ins): #由后序序列posts和中序序列ins构造二叉链 …… def _CreateBTree2(posts,i,ins,j,n): #被CreateBTree2方法调用 …… #主程序 ins=[……] posts=[……] print() print(" 中序:",end=' '); print(ins) print(" 后序:",end=' '); print(posts) print(" 构造二叉树bt") bt= ___ ___ ___ ___ bt= ___ ___ ___ ___ print(" bt:",end=' '); print(bt.DispBTree()) x= ___ ___ ___ ___ p=bt.FindNode(x) if p!=None: print(" bt中存在"+x) else: print(" bt中不存在"+x) print(" bt的高度=%d" %(bt.Height())) print(" 先序序列:",end=' '); _ ___ ___ ___;print() print(" 中序序列:",end=' '); _ ___ ___ ___;print() print(" 后序序列:",end=' '); _ ___ ___ ___;print() print(" 层次序列:",end=' '); _ ___ ___ ___;print()
from collections import deque
class BTNode: #二叉链中结点类
def __init__(self,d=None): #构造方法
self.data=d
self.lchild=None
self.rchild=None
class BTree: #二叉树类
def __init__(self,d=None): #构造方法
self.root=BTNode(d)
def DispBTree(self): #返回二叉链的括号表示串
return self._DispBTree1(self.root)
def _DispBTree1(self,t): #被DispBTree方法调用
if t==None:
return ''
else:
return '(%s%s%s)' % (t.data,self._DispBTree1(t.lchild),self._DispBTree1(t.rchild))
def FindNode(self,x): #查找值为x的结点算法
return self._FindNode1(self.root,x)
def _FindNode1(self,t,x): #被FindNode方法调用
if t==None:
return None
elif t.data==x:
return t
else:
p=self._FindNode1(t.lchild,x)
if p!=None:
return p
else:
return self._FindNode1(t.rchild,x)
def Height(self): #求二叉树高度的算法
return self._Height1(self.root)
def _Height1(self,t): #被Height方法调用
if t==None:
return 0
else:
return max(self._Height1(t.lchild),self._Height1(t.rchild))+1
def PreOrder(bt): #先序遍历的递归算法
_PreOrder(bt.root)
def _PreOrder(t): #被PreOrder方法调用
if t!=None:
print(t.data,end=' ')
_PreOrder(t.lchild)
_PreOrder(t.rchild)
def InOrder(bt): #中序遍历的递归算法
_InOrder(bt.root)
def _InOrder(t): #被InOrder方法调用
if t!=None:
_InOrder(t.lchild)
print(t.data,end=' ')
_InOrder(t.rchild)
def PostOrder(bt): #后序遍历的递归算法
_PostOrder(bt.root)
def _PostOrder(t): #被PostOrder方法调用
if t!=None:
_PostOrder(t.lchild)
_PostOrder(t.rchild)
print(t.data,end=' ')
def LevelOrder(bt): #层次遍历的算法
Q=deque()
Q.append(bt.root)
while len(Q)!=0:
t=Q.popleft()
print(t.data,end=' ')
if t.lchild!=None:
Q.append(t.lchild)
if t.rchild!=None:
Q.append(t.rchild)
def CreateBTree2(posts,ins): #由后序序列posts和中序序列ins构造二叉链
n=len(posts)
return _CreateBTree2(posts,0,ins,0,n)
def _CreateBTree2(posts,i,ins,j,n): #被CreateBTree2方法调用
if n<=0:
return None
else:
r=BTNode(posts[i+n-1])
k=ins.index(posts[i+n-1])
r.lchild=_CreateBTree2(posts,i,ins,j,k-j)
r.rchild=_CreateBTree2(posts,i+k-j,ins,k+1,n-(k-j)-1)
return r
#主程序
ins=[……]
posts=[……]
print()
print(" 中序:",end=' '); print(ins)
print(" 后序:",end=' '); print(posts)
print(" 构造二叉树bt")
bt=BTree()
bt.root=BTree.CreateBTree2(posts,ins)
print(" bt:",end=' '); print(bt.DispBTree())
x= ___ ___ ___ ___
p=bt.FindNode(x)
if p!=None:
print(" bt中存在"+x)
else:
print(" bt中不存在"+x)
print(" bt的高度=%d" %(bt.Height()))
print(" 先序序列:",end=' '); _PreOrder(bt.root);print()
print(" 中序序列:",end=' '); _InOrder(bt.root);print()
print(" 后序序列:",end=' '); _PostOrder(bt.root);print()
print(" 层次序列:",end=' '); _LevelOrder(bt.root);print()