class BTree:
def __int__(self,d=None):
self.b=None
def SetRoot(self,r):
self.b=r
def Depth(self):
return self._Depth(self.b)
def _Depth(self, t):
if t == None:
return 0
else:
lh = self._Depth(t.lchild)
rh = self._Depth(t.rchild)
return max(lh, rh) + 1
class BTNode:
def __init__(self,d=None):
self.data=d
self.lchild=None
self.rchild=None
def NodeCount1(bt):
return _NodeCount1(bt.b)
def _NodeCount1(t):
if t==None:
return 0
k=1
m=_NodeCount1(t.lchild)
n=_NodeCount1(t.rchild)
return k+m+n
def CreateBiTree(bt):
bt.b=CreateBiTree1()
def CreateBiTree1():
ch=input("输入结点值:")
if ch == '#':
t = BTNode()
t= None
else:
t=BTNode()
t.data=ch
t.lchild=CreateBiTree1()
t.rchild=CreateBiTree1()
return t
def PreOrder(bt): # 先序遍历的递归算法
PreOrder1(bt.b)
def PreOrder1(t): # 被PreOrder方法调用
if t != None:
print(t.data, end=' ') # 访问根结点
PreOrder1(t.lchild) # 先序遍历左子树
PreOrder1(t.rchild) # 先序遍历右子树
def InOrder(bt): # 中序遍历的递归算法
InOrder1(bt.b)
def InOrder1(t): # 被InOrder方法调用
if t != None:
InOrder1(t.lchild) # 中序遍历左子树
print(t.data, end=' ') # 访问根结点
InOrder1(t.rchild) # 中序遍历右子树
def PostOrder(bt): # 后序遍历的递归算法
PostOrder1(bt.b)
def PostOrder1(t): # 被PostOrder方法调用
if t != None:
PostOrder1(t.lchild) # 后序遍历左子树
PostOrder1(t.rchild) # 后序遍历右子树
print(t.data, end=' ') # 访问根结点
if __name__=='__main__':
bt=BTree()
CreateBiTree(bt)
print('先序遍历结果:',end=' ')
PreOrder(bt)
print()
print('中序遍历结果:',end=' ')
InOrder(bt)
print()
print('后序遍历结果:',end=' ')
PostOrder(bt)
print()
print("树的深度为:%d" % (bt.Depth()))
print("叶子结点个数为:%d" % (NodeCount1(bt)))
python从键盘上输入一组数据,建立一个以二叉链表形式存储的二叉树。对所建立的二叉树分别进行先序、中序和后序遍历,并输出结果。
最新推荐文章于 2024-01-04 15:42:27 发布