二叉树的创建与遍历代码
一、概述
二叉树是一种常用的数据结构,具有广泛的应用。在计算机科学中,二叉树是一种非线性的数据结构,由一组称为节点的元素组成,每个节点最多可以有两个子节点。创建和遍历二叉树是二叉树操作的关键。
二、二叉树的创建
创建二叉树有多种方式,常见的有手动创建和通过遍历方式创建。下面分别介绍这两种方式:
2.1 手动创建二叉树
手动创建二叉树是指根据实际需求,手动输入节点值和节点关系来构建二叉树。以下为手动创建二叉树的步骤:
1.定义二叉树节点结构,包含节点值和左右子节点指针。
2.创建根节点,并输入根节点的值。
3.根据实际需求,逐级输入左右子节点的值,并将其与父节点相连。
4.重复步骤3,直到所有节点都输入完毕。
手动创建二叉树的代码示例:
class BinTreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def build_binary_tree():
root_value = input("请输入根节点的值:")
root = BinTreeNode(root_value)
nodes = [root] # 存储待连接的节点
while nodes:
parent = nodes.pop(0)
left_value = input("请输入节点" + parent.value + "的左子节点的值(没有请输入None):")
if left_value != "None":
left = BinTreeNode(left_value)
parent.left = left
nodes.append(left)
right_value = input("请输入节点" + parent.value + "的右子节点的值(没有请输入None):")
if right_value != "None":
right = BinTreeNode(right_value)
parent.right = right
nodes.append(right)
return root
# 创建二叉树
root = build_binary_tree()
2.2 遍历方式创建二叉树
遍历方式创建二叉树是指通过遍历给定的序列(如前序遍历或层次遍历),逐个节点创建二叉树。以下为遍历方式创建二叉树的步骤:
5.定义二叉树节点结构,包含节点值和左右子节点指针。
6.根据给定的遍历序列,逐个节点创建二叉树节点,并将其与前一个节点相连。
7.重复步骤2,直到所有节点都创建完毕。
遍历方式创建二叉树的代码示例(以前序遍历为例):
class BinTreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def build_binary_tree(preorder):
if not preorder:
return None
value = preorder.pop(0)
if value is None:
return None
root = BinTreeNode(value)
root.left = build_binary_tree(preorder)
root.right = build_binary_tree(preorder)
return root
# 给定的前序遍历序列
preorder =二叉树定义 [1, 2, None, 3, None, None, 4, 5]
# 创建二叉树
root = build_binary_tree(preorder)
三、二叉树的遍历
二叉树的遍历是指按照一定规则,依次访问二叉树的所有节点。常见的二叉树遍历方式有前序遍历、中序遍历和后序遍历。
3.1 前序遍历
前序遍历是指先访问根节点,然后遍历左子树,最后遍历右子树。
前序遍历的递归实现代码示例:
def preorder_traversal_recursive(root):
if root is None:
return
print(root.value)
preorder_traversal_recursive(root.left)
preorder_traversal_recursive(root.right)
前序遍历的迭代实现代码示例:
def preorder_traversal_iterative(root):
stack = []
while stack or root:
if root:
print(root.value)
stack.append(root.right)
root = root.left
else:
root = stack.pop()
3.2 中序遍历
中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。
中序遍历的递归实现代码示例:
def inorder_traversal_recursive(root):
if root is None:
return
inorder_traversal_recursive(root.left)
print(root.value)
inorder_traversal_recursive(root.right)
中序遍历的迭代实现代码示例:
def inorder_traversal_iterative(root):
stack = []
while stack or root:
if root:
stack.append(root)
root = root.left
else:
root = stack.pop()
print(root.value)
root = root.right
3.3 后序遍历
后序遍历是指先遍历左子树,然后遍历右子树,最后访问根节点。
后序遍历的递归实现代码示例:
def postorder_traversal_recursive(root):
if root is None:
return
postorder_traversal_recursive(root.left)
postorder_traversal_recursive(root.right)
print(root.value)
后序遍历的迭代实现代码示例:
def postorder_traversal_iterative(root):
stack = []
last_visited = None
while stack or root:
if root:
stack.append(root)
root = root.left
else:
peek_node = stack[-1]
if peek_node.right and last_visited != peek_node.right:
root = peek_node.right
else:
print(peek_node.value)
last_visited = stack.pop()
四、总结
本文介绍了二叉树的创建和遍历代码。通过手动创建和遍历方式创建二叉树,可以根据实际需求构建出符合要求的二叉树。而通过前序遍历、中序遍历和后序遍历,可以方便地遍历二叉树的所有节点。二叉树的创建和遍历是掌握二叉树操作的基础,对于深入理解和应用二叉树非常重要。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论