Maoyl's blog Maoyl's blog
首页
  • 前端基础

    • HTML
    • CSS
    • CSS动画
    • JavaScript文章
    • stylus
  • 性能优化

    • 《性能优化》笔记
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《JavaScript设计模式》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架

    • Vue相关
    • React相关
  • 前端监控

    • 前端监控简介
  • 学习笔记

    • 《Vue》笔记
    • 《React》笔记
    • 小程序学习笔记
  • 后端基础

    • Nodejs
  • 学习笔记

    • 数据结构
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网页性能
  • 学习笔记

    • 《Git》学习笔记
    • 《Vim》学习笔记
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

maoyln

日日行,不怕千万里
首页
  • 前端基础

    • HTML
    • CSS
    • CSS动画
    • JavaScript文章
    • stylus
  • 性能优化

    • 《性能优化》笔记
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《JavaScript设计模式》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架

    • Vue相关
    • React相关
  • 前端监控

    • 前端监控简介
  • 学习笔记

    • 《Vue》笔记
    • 《React》笔记
    • 小程序学习笔记
  • 后端基础

    • Nodejs
  • 学习笔记

    • 数据结构
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网页性能
  • 学习笔记

    • 《Git》学习笔记
    • 《Vim》学习笔记
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 第一讲 基本概念

  • 第二讲 线性结构

  • 第三讲 树(上)

    • 树与树的表示
    • 二叉树及存储结构
      • 二叉树的定义
      • 二叉树的特点
      • 二叉树的分类
      • 二叉树的表示
        • 链式存储结构
        • 顺序存储结构
    • 二叉树的遍历
  • 第四讲 树(中)

  • 第五讲 树(下)

  • 第六讲 图(上)

  • 《数据结构》学习笔记
  • 第三讲 树(上)
maoyln
2024-07-04
目录

二叉树及存储结构

# 二叉树的定义

二叉树是一种特殊的树结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树在计算机科学中有广泛的应用,如表达式解析、排序、搜索等。

二叉树的正式定义

二叉树(Binary Tree): 是一种树形数据结构,其中每个节点最多有两个子节点,这两个子节点分别称为左子节点和右子节点。

# 二叉树的特点

  1. 每个节点最多有两个子节点:一个左子节点和一个右子节点。
  2. 子节点的顺序是重要的:即使一个节点只有一个子节点,也需要区分它是左子节点还是右子节点。
  3. 递归定义:二叉树是由一个根节点和两个分别为左子树和右子树的二叉树组成的。

# 二叉树的分类

根据不同的特性,二叉树可以进一步分类为:

  1. 满二叉树(Full Binary Tree):每个节点要么没有子节点,要么有两个子节点。
  2. 完全二叉树(Complete Binary Tree):除了最后一层,所有层的节点都是满的,且最后一层的节点尽可能地从左到右排列。
  3. 完美二叉树(Perfect Binary Tree):所有内部节点都有两个子节点,且所有叶节点在同一层。
  4. 平衡二叉树(Balanced Binary Tree):任何节点的两个子树的高度差不超过1。
  5. 二叉搜索树(Binary Search Tree, BST):对于每个节点,左子树的所有节点值小于该节点值,右子树的所有节点值大于该节点值。

# 二叉树的表示

二叉树可以通过多种方式表示,常见的表示方法包括:

  1. 链式存储(链表):每个节点包含数据和指向左、右子节点的指针。
  2. 顺序存储(数组):使用数组存储二叉树节点。

# 链式存储结构

在链式存储结构中,每个节点包含三个部分:数据、左子节点指针和右子节点指针。

class TreeNode {
  constructor(value) {
    this.value = value; // 节点数据
    this.left = null;   // 左子节点指针
    this.right = null;  // 右子节点指针
  }
}

// 创建根节点
const root = new TreeNode('root');

// 创建子节点
const leftChild = new TreeNode('left');
const rightChild = new TreeNode('right');

// 连接子节点
root.left = leftChild;
root.right = rightChild;

console.log(root);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 顺序存储结构

在顺序存储结构中,二叉树节点按层级顺序存储在数组中。对于数组中的第 i 个节点:

  • 左子节点索引为 2 * i + 1
  • 右子节点索引为 2 * i + 2
// 使用数组表示二叉树
const tree = ['root', 'left', 'right', 'left.left', 'left.right', 'right.left', 'right.right'];

// 访问根节点
console.log(tree[0]); // 'root'

// 访问左子节点
console.log(tree[1]); // 'left'

// 访问右子节点
console.log(tree[2]); // 'right'

// 访问左子节点的左子节点
console.log(tree[3]); // 'left.left'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
编辑 (opens new window)
#数据结构
上次更新: 2025/04/18, 01:42:12
树与树的表示
二叉树的遍历

← 树与树的表示 二叉树的遍历→

最近更新
01
GSAP动画库——如何高效写动画
04-17
02
自适应方案PxToRem
09-10
03
性能优化-requestAnimationFrame
08-10
更多文章>
Theme by Vdoing | Copyright © 2019-2025 备案号:京ICP备19058102号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式