二叉树的二叉链表和三叉链表

在二叉树的数据结构中,通常有两种链表存储方式:二叉链表和三叉链表。这里,我们先澄清一下概念,通常我们讨论的是二叉链表,它用于存储二叉树的节点。而"三叉链表"这个术语在二叉树的上下文中不常见,可能是指每个节点有三个子节点的链表(但这并不是标准的术语)。如果我们将"三叉链表"理解为每个节点有三个子节点的二叉树的扩展,那么我们可以这样描述:

二叉链表(Binary Linked List for Binary Tree):

二叉链表是二叉树的链式存储结构,其中每个节点包含三个域:数据域和两个指针域。两个指针域分别指向左孩子和右孩子。

节点结构

cpp 复制代码
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

绘制二叉链表

  1. 创建根节点。
  2. 为根节点添加左孩子和/或右孩子。
  3. 递归地为每个非叶子节点添加左孩子和/或右孩子。

三叉链表(假设为每个节点有三个子节点的链表):

如果我们考虑的是每个节点有三个子节点的情况,那么每个节点将包含四个域:数据域和三个指针域,分别指向左孩子、中间孩子和右孩子。

节点结构

cpp 复制代码
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *middle; // 中间孩子,如果是二叉树的扩展,则此指针不存在
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), middle(NULL), right(NULL) {}
};

绘制三叉链表

  1. 创建根节点。
  2. 为根节点添加左孩子、中间孩子和/或右孩子。
  3. 递归地为每个非叶子节点添加左孩子、中间孩子和右孩子。

绘图示例:

假设我们有以下二叉树:

复制代码
    1
   / \
  2   3
 / \
4   5

二叉链表的表示

复制代码
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->left->left = new TreeNode(5);

三叉链表的表示(如果考虑中间孩子):

复制代码
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->middle = nullptr; // 如果没有中间孩子,可以设置为nullptr
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->middle = new TreeNode(5);

在实际编程中,我们通常使用二叉链表来存储二叉树。三叉链表的概念可能是对二叉树的一种扩展,用于特定的应用场景。在竞赛编程中,正确地实现和绘制二叉树是非常重要的,因为它是许多算法和数据结构问题的基础。

相关推荐
vir026 小时前
P1928 外星密码(dfs)
java·数据结构·算法·深度优先·1024程序员节
胡萝卜3.06 小时前
C++ list核心接口与实战技巧
数据结构·c++·list·list使用
仟千意6 小时前
数据结构:排序篇
数据结构
Dream it possible!7 小时前
LeetCode 面试经典 150_链表_合并两个有序链表(58_21_C++_简单)
leetcode·链表·面试·1024程序员节
脚踏实地的大梦想家8 小时前
【Go】P8 Go 语言核心数据结构:深入解析切片 (Slice)
开发语言·数据结构·golang
蒙奇D索大9 小时前
【数据结构】数据结构核心考点:AVL树删除操作详解(附平衡旋转实例)
数据结构·笔记·考研·学习方法·改行学it·1024程序员节
大数据张老师11 小时前
数据结构——平衡二叉树
数据结构·算法·查找
大数据张老师13 小时前
数据结构——BF算法
数据结构·算法·1024程序员节
Yupureki13 小时前
从零开始的C++学习生活 14:map/set的使用和封装
c语言·数据结构·c++·学习·visual studio·1024程序员节
一匹电信狗13 小时前
【LeetCode_876_2.02】快慢指针在链表中的简单应用
c语言·数据结构·c++·算法·leetcode·链表·stl