数据结构中的各种树

本文介绍了数据结构中常见的树类型,包括二叉树、二叉查找树、二叉平衡树(如AVL树)、红黑树、B-树、B+树以及字典树。内容涵盖每种树的定义、特性、算法以及应用场景,旨在帮助读者理解并掌握这些树结构的基本概念和操作方法。

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

树是数据结构中常见的一种结构,由于其特殊的结构给我们提供了对数级别的访问速度,同时也是与递归概念结合最紧密的数据结构,树的子树还是树。本文整理了常见的树、常用算法和应用,对一些深入和底层的原理没有进行过多的研究,整个相对比较粗浅,旨在对常见的树结构有大致的了解。

常用到提到的树结构有:二叉查找树,平衡二叉树,红黑树,B树,B+树,字典树。

一、二叉树

二叉树是树家族中最常见也是最基本的一种结构。

1. 定义

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。

简单来说就是每个结点最多有两个子树的树结构。

2. 完全二叉树

只有最先面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的二叉树(向左补满)

3.满二叉数

除了叶子结点每个结点都有左右子叶且叶结点都处在最底层的二叉树。

4.算法

二叉树的算法主要包括遍历和创建两个。

(1)遍历

二叉树的遍历分为三种遍历方式:
- 前序遍历:先访问根结点,再左子树,再右子树
- 中序遍历:先访问左子树, 再根结点,再右子树
- 后续遍历:先访问左子树, 再右子树,再根结点

public class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

// 前序遍历
public void preOrder (TreeNode node) {
    if (node == null) {
        System.out.println("null");
        return;
    }

    System.out.println(node.val);
    preOrder(node.left);
    preOrder(node.right);   
}

// 中序遍历
public void inOrder (TreeNode node) {
    if (node == null) {
        System.out.println("null");
        return;
    }

    inOrder(node.left);
    System.out.println(node.val);
    inOrder(node.right);    
}

// 后序遍历
public void postOrder (TreeNode node) {
    if (node == null) {
        System.out.println("null");
        return;
    }

    inOrder(node.left);
    inOrder(node.right);    
    System.out.println(node.val);
}

(2)还原二叉树

二叉树可以通过[前序]+[中序] 或 [后序]+[中序]两种方式还原。

一下图为例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值