C++学习笔记(树)

本文介绍了树的基本概念,包括根节点、父节点、子节点和叶节点,重点讲解了二叉树和二叉搜索树的特性。在二叉搜索树中,节点的键值遵循特定规则,允许高效插入和访问。此外,还提到了平衡二叉搜索树如ABL树和红黑树,以及它们保持平衡的策略。

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


树有节点(nodes)和边(edges)构成。

整棵树最上端的节点称为根节点(root),每个节点 拥有 具有方向性的边(directed edges)。相连节点中,在上者称为父节点(parent),在下者称为子节点(child),无子节点者称为叶节点(leaf)。

如果 最多 只允许两个子节点,即所谓二叉树(binaty tree)。不同节点拥有相同的父节点,彼此称为兄弟节点(siblings)。根节点至任意节点之间有唯一路径(path),路径所经过的边数成为长度(length)。根节点至任一节点的长度,即该节点的深度(depth)。根节点的深度永远为0。某节点至其最深子节点(叶节点)的路径长度,称为该节点的高度(height)。整棵树的高度以根节点的高度来代表。

二叉搜索树(binary search tree) 可提供对数时间(logarithmic time)的元素插入和访问。

二叉搜索树的节点放置规则:任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值。因此,从根节点一直往左走,直到无左路可走,即得最小元素。从节点一直往右走,直到无右路可走,即得最大元素。

元素的插入:从根节点开始,遇键值较大者就向左,遇键值较小者就向右,一直到尾端,既为插入点。

元素的移除:欲删除旧节点A,情况可分两种。如果A只有一个子节点,就直接将A的子节点连至A的父节点,并将A删除。如果A有两个子节点,就以右子树内的最小节点取代A。

平衡二叉搜索树:没有绝对标准,大致意思为:没有任何一个节点过深(深度过大)。

ABL tree:平衡条件的建立是为了确保整棵树的深度为O(logN)。要求任何节点的左右子树高度相差最多为1。

单旋转(Single Rotation): 

双旋转(Double Rotation): 


RD-tree(红黑树): 必须满足以下规则:
1.每个节点不是红色就是黑色,
2.根节点为黑色,
3.如果节点为红,其子节点必须为黑,
4.任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值