rbtree

linux kernel有链表、队列、映射、二叉树等内建数据结构,并且封装一系列API给linux kernel开发人员使用,本章讲解二叉树。

base linux-2.6.34

简介

二叉树:每一个节点最多只有两个子节点

二叉搜索树:通常简称为BST,是按照一定顺序排列节点的二叉树,其顺序遵循如下法则

  • 左子节点小于父节点

  • 右子节点大于父节点

叶子节点:处于树底层的节点(即 没有子节点的节点,叫叶子节点)

节点深度:从根节点开始,到达此节点经过的父节点数目

树高度:处于最底层叶子节点深度

平衡二叉搜索树:所有叶子节点深度差不超过1的二叉搜索树

红黑树:平衡二叉搜索树的一种,其遵循如下法则

  • 所有节点只有红色或黑色

  • 叶子节点都是黑色

  • 叶子节点不包含数据

  • 所有非叶子节点都有两个子节点

  • 如果一个节点是红色,子节点都是黑色

  • 在一个节点到其叶子节点的路径中,如果总是包含同样数目的黑色节点,该路径相比其它路径是最短的。

linux kernel 二叉树就是红黑树,称为rbtree

如何定义+初始化根节点?

如何初始化节点?

一般将节点struct rb_node内嵌于某一个对象结构体中

如何在树中插入节点?

linux kernel没有提供相关API,所以需要内核开发者根据实际事况自行实现

如何在树中查找节点?

linux kernel没有提供相关API,所以需要内核开发者根据实际事况自行实现

如何在树中删除节点?

如何遍历所有节点?

如何得到节点内嵌的对象结构体对应指针?

实践

Last updated

Was this helpful?