class TNode(object):
# 创建二叉树结点的函数
def __init__(self):
self.data = '#'
self.LChild = None
self.RChild = None
class Tree(object):
# 创建二叉树
def CreateTree(self, root):
data = input('->')
if data == '#':
root = None
else:
root.data = int(data)
root.LChild = TNode()
self.CreateTree(root.LChild)
root.RChild = TNode()
self.CreateTree(root.RChild)
# 判断二叉树是否为二叉排序树
def CheckTree(self,root):
if root.data !='#':
if root.LChild.data =='#' and root.RChild.data =='#':
return True
if root.LChild.data =='#' and root.data<root.RChild.data:
return self.CheckTree(root.RChild)
if root.data>root.LChild.data and root.RChild.data =='#':
return self.CheckTree(root.LChild)
if root.data>root.LChild.data and root.data<root.RChild.data:
return self.CheckTree(root.LChild) and self.CheckTree(root.RChild)
else:
return True
# 创建一棵二叉树
print('创建一棵二叉树\n')
print(' 4')
print(' / \\')
print(' 5 6')
print(' / \\ \\')
print(' 1 2 7 ')
print('4 5 1 # # 2 # # 6 # 7 # #')
print('请仿照上述序列,输入某一二叉树中各结点的值(#表示空结点),每输入一个值按回车换行:')
if __name__ == "__main__":
bTN = TNode()
bT = Tree()
bT.CreateTree(bTN)
check1=bT.CheckTree(bTN)
if check1 :
print("此二叉树是二叉排序树")
else:
print("此二叉树不是二叉排序树")
测试数据和结果:
测试数据:2,1,#,#,#
测试结果:此二叉树是二叉排序树
测试数据:4,5,1,#,#,2,#,#,6,#,7,#,#
测试结果:此二叉树不是二叉排序树