树的底层实现(上)

这篇博客主要介绍了树的底层实现,包括通过数组和链表实现二叉树,重点讲解了二叉搜索树的查找、遍历(深度优先和广度优先)以及插入和删除操作。内容基于Adam Drozdek的《数据结构与算法》教材,特别讨论了非递归深度遍历和线索二叉树的概念。
摘要由CSDN通过智能技术生成

本片内容是根据Adam Drozdek编写的英文版教材《数据结构与算法》整理的,主要是树的底层实现,以及相关的一些内容。后面会再整理一些应用到了树的经典算法题。由于知识点较多,所以分成两篇文章。

1.基本介绍

1.1树的出现

         先来看看其他几种数据结构,链表相对数组更灵活,尤其是插入和删除操作,但是链表不能表示封层对象;栈和队列可以反应出分层,当时仅限于一维。所以引入了一种新的数据结构:树,来表示分层的对象。

1.2树的一些定义

Length:从根节点到目的节点的边(两个节点之间为一条边)的数量

Level:length+1

Height:level的最大值

1.3树的类别

二叉树(binary tree):每个节点最多有两个子节点,这两个子节点称为左节点、又节点

完全二叉树(complete binary tree):非终结节点(树的最后一个节点)都有两个子节点,且所有的叶节点(leaves)都在同一层。

二叉搜索树(binary search tree):对于所有的节点,左子节点比父节点的值小,右子结点比父节点的值大,(一个树里没有相同值的节点)

平衡树(balanced tree):对于任何节点的左子树和右子树的高度差小于等于1

         二叉树的应用很广泛,尤其是二叉搜索树,所以后面的代码示例大多都是针对二叉搜索树。

2.二叉树的实现

2.1通过数组实现

数组里存放的是对象:

public class ArrayForTreeNode {
     int value;
     int leftPosition;//表示该节点的左子节点在数组中的位置
     int rightPosition;//表示该节点的左子节点在数组中的位置
}

Index

Value

leftPosition

rightPosition

0

13

1

2

1

14

-1

-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值