001.树——二叉树
1.代码
class TreeNode:
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
class Tree:
def __init__(self):
self.root = None
self.queue = list()
def add(self, data):
node = TreeNode(data)
if not self.root:
self.root = node
self.queue.append(self.root)
else:
cur = self.queue[0]
if cur.left is None:
cur.left = node
self.queue.append(cur.left)
elif cur.right is None:
cur.right = node
self.queue.append(cur.right)
self.queue.pop(0)
def BFS(self, root):
if not root:
return None
queue = list()
bfs_res = list()
queue.append(root)
while queue:
node = queue.pop(0)
bfs_res.append(node.data)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return bfs_res
def preTraverse(self, root):
pre_res = list()
def pre(root):
if not root:
return
pre_res.append(root.data)
pre(root.left)
pre(root.right)
pre(root)
return pre_res
def midTraverse(self, root):
mid_res = list()
def mid(root):
if not root:
return
mid(root.left)
mid_res.append(root.data)
mid(root.right)
mid(root)
return mid_res
def postTraverse(self, root):
post_res = list()
def post(root):
if not root:
return
post(root.left)
post(root.right)
post_res.append(root.data)
post(root)
return post_res
def leaveNode(self, root):
lev_res = list()
def leave(root):
if not root:
return
if not root.left and not root.right:
lev_res.append(root.data)
leave(root.left)
leave(root.right)
leave(root)
return lev_res
def heightOfTree(self, root):
def height(root):
if not root:
return 0
left_depth = height(root.left)
right_depth = height(root.right)
return max(left_depth, right_depth) + 1
return height(root)
def main():
while True:
try:
nums = list(input().strip().split())
tree = Tree()
for num in nums:
tree.add(num)
bfs_res = tree.BFS(tree.root)
print("广度优先:{}".format(bfs_res))
pre_res = tree.preTraverse(tree.root)
print("前序遍历:{}".format(pre_res))
mid_res = tree.midTraverse(tree.root)
print("中序遍历:{}".format(mid_res))
post_res = tree.postTraverse(tree.root)
print("后序遍历:{}".format(post_res))
lev_res = tree.leaveNode(tree.root)
print("叶子结点:{}".format(lev_res))
height = tree.heightOfTree(tree.root)
print("高度:{}".format(height))
except EOFError:
break
if __name__ == "__main__":
main()
2.测试用例