二叉树详细介绍与代码生成遍历

本文详细介绍了树的概念、结构,特别是二叉树的存储结构(顺序和链式)、堆的基本概念、平衡二叉树的重要性,以及四种不同的遍历方式(前序、中序、后序和层序)。提供了代码实例来演示这些概念和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树的概念及其结构

要了解二叉树,那么首要的就是要知道树的概念。
在这里插入图片描述

在计算机科学中,树是一种广泛使用的抽象数据类型,用于模拟层次结构,树由节点构成。在这种层级系统中,存在一个最顶层的节点,称为根节点,它没有父节点。树中的其他节点可以有一个(在非二叉树中)或多个子节点,但只有一个父节点,除了根节点外。

树结构的基本术语:

  • 节点(Node): 树的基本部分,可能包含一个值或数据,并可能有子节点。
  • 根节点(Root): 树的顶端节点,没有父节点。
  • 叶子节点(Leaf nodes): 没有子节点的节点。
  • 子节点(Child nodes): 某个节点的直接后继节点。
  • 父节点(Parent node): 某个节点的直接前驱节点。
  • 兄弟节点(Sibling nodes): 具有相同父节点的节点。
  • 边(Edge): 连接节点的线,它定义了节点之间的父子关系。
  • 路径(Path): 从一个节点到另一个节点的边的序列。
  • 深度(Depth): 从根节点到某个节点的边的数目。
  • 高度(Height): 一个节点到最远叶子节点的最长路径的边的数目。树的高度是其所有节点高度的最大值。

下图是树的结构示意图
在这里插入图片描述
树结构没有循环或闭环,这是它和图结构的主要区别,如下就不能称作是树结构,因为子树之间有相交。
在这里插入图片描述

树的构造——代码表示

class TreeNode:
    def __init__(self, value):
        self.value = value  # 当前节点的值
        self.children = []  # 子节点的列表

    def add_child(self, child_node):
        """添加子节点"""
        self.children.append(child_node)

    def remove_child(self, child_node):
        """移除子节点"""
        self.children = [child for child in self.children if child is not child_node]

    def traverse(self):
        """遍历树节点"""
        nodes_to_visit = [self]
        while len(nodes_to_visit) > 0:
            current_node = nodes_to_visit.pop()
            print(current_node.value)
            nodes_to_visit.extend(current_node.children)

# 示例构造树
root = TreeNode('Root')
child1 = TreeNode('Child1')
child2 = TreeNode('Child2')
child3 = TreeNode('Child3')

root.add_child(child1)
root.add_child(child2)
child1.add_child(child3)

# 遍历和打印树
root.traverse()

上述代码定义了一个树节点,它包含一个值和一个子节点列表。并且可以添加或移除子节点,并有一个用于遍历树的方法,它采用深度优先遍历(Depth-First Search, DFS)的方式来访问每个节点。

这个例子中构建的树结构如下所示:
在这里插入图片描述
当运行 root.traverse() 方法时,它会打印出:

Root
Child1
Child3
Child2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream_Bri

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值