0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
投递百度等公司10个岗位 >
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
:写了一个程序,求大神看看 # -*- coding: UTF-8 -*-.
class Node(object):
"""节点类"""
def __init__(self, data = -1, lchild = None, rchild = None, isEmpty = 0):
self.data = data
self.lchild = lchild
self.rchild = rchild
self.isEmpty = isEmpty
class BinaryTree(object):
"""树类"""
def __init__(self):
self.root = Node(isEmpty = 1)
def add(self, data):
"""为树增加节点,建立二叉查找树"""
node = Node(data)
if self.root.isEmpty == 1:
self.root = node
else:
treeNode = self.root
while(1):
if node.data <= treeNode.data:
if treeNode.lchild == None:
treeNode.lchild = node
break
else:
treeNode = treeNode.lchild
else:
if treeNode.rchild == None:
treeNode.rchild = node
break
else:
treeNode = treeNode.rchild
def printTree(self):
"""按之字形顺序打印二叉树"""
if self.root == None:
return
myList = []
myList.append(self.root)
flagForward = 0# 为0表示下一行逆序打印,为1表示下一行正序打印
numberNow = 1
numberNext = 0
while(1):
# 表示在该行查找
if numberNow:
# 总是将先放入的先打印出来
node = myList.pop(0)
numberNow -= 1
print node.data,
# 根据flagForward的值改变左右子树的打印数学
if flagForward:
if node.rchild:
myList.insert(numberNow, node.rchild)
numberNext += 1
if node.lchild:
myList.insert(numberNow, node.lchild)
numberNext += 1
else:
if node.lchild:
myList.insert(numberNow, node.lchild)
numberNext += 1
if node.rchild:
myList.insert(numberNow, node.rchild)
numberNext += 1
# 表示该行结束了
else:
# 下一行变成该行
if numberNext:
numberNow = numberNext
numberNext = 0
# 正方向逆序
flagForward = ~flagForward
# 表示树结束了
else:
break
def test():
'Test the program.'
arr = [5, 6, 1, 4, 2, 69, -1, 24]
tree = BinaryTree()
for item in arr:
tree.add(item)
# 5
# 1 6
# -1 5 69
# 2 24
print '按之字形顺序打印二叉树:'
tree.printTree()
if __name__ == "__main__":
test()
投递快手等公司10个岗位 >
0 点赞 评论 收藏
分享
2017-09-15 21:46
北京航空航天大学 算法工程师 0 点赞 评论 收藏
分享
关注他的用户也关注了: