学习笔记_数据结构_树_(1)
时间:2021年7月14日
作者:Afollower
分类: 学习记录/数据结构/树
通过列表构建二叉树,并实现二叉树层次遍历,先序遍历,中序遍历和后序遍历
# -*- coding: UTF-8 -*-
from collections import deque
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Tree:
def __init__(self, tree: list):
self.tree = tree
self.root = TreeNode(None)
self.create_tree()
def create_tree(self):
"""
构建树
"""
if not self.tree:
return None
self.root = TreeNode(self.tree[0])
queue = deque([self.root])
len_tree = len(self.tree)
nums = 1
while nums < len_tree:
node = queue.popleft()
if node:
node.left = TreeNode(self.tree[nums]) if self.tree[nums] else None
queue.append(node.left)
if nums + 1 < len_tree:
node.right = TreeNode(self.tree[nums + 1]) if self.tree[nums + 1] else None
queue.append(node.right)
nums += 1
nums += 1
def get_tree_by_bfs(self):
"""
层次遍历
:return:list
"""
res = []
queue = deque([self.root])
while queue:
node = queue.popleft()
if node:
res.append(node.val)
queue.append(node.left)
queue.append(node.right)
return res
def pre_traversal(self):
"""
先序遍历
"""
res = []
def traversal(head: TreeNode):
if not head:
return
res.append(head.val)
traversal(head.left)
traversal(head.right)
traversal(self.root)
return res
def in_traversal(self):
"""
中序遍历
"""
res = []
def traversal(head: TreeNode):
if not head:
return
traversal(head.left)
res.append(head.val)
traversal(head.right)
traversal(self.root)
return res
def post_traversal(self):
"""
后序遍历
"""
res = []
def traversal(head: TreeNode):
if not head:
return
traversal(head.left)
traversal(head.right)
res.append(head.val)
traversal(self.root)
return res
tree = Tree([3, 9, 20, 15, 7, None, None])
print(tree.get_tree_by_bfs())
print(tree.pre_traversal())
print(tree.in_traversal())
print(tree.post_traversal())
输出
[3, 9, 20, 15, 7]
[3, 9, 15, 7, 20]
[15, 9, 7, 3, 20]
[15, 7, 9, 20, 3]
这篇学习笔记介绍了如何用列表构建二叉树,并实现了层次遍历、先序遍历、中序遍历和后序遍历的方法。通过一个具体的例子展示了这些遍历过程及其输出结果。
3786

被折叠的 条评论
为什么被折叠?



