JAVA之树的详解

JAVA之树的详解

度:每一个结点的子节点数量

树高:树的总层数

根节点:最顶层的节点

左子节点:左下方的节点

右子节点:右下方的节点

二叉查找树

特点
  1. 每一个节点上最多有两个子节点

  2. 任意节点左子树上的值都小于当前节点

  3. 任意节点右子树的值都大于当前节点

添加节点规则
  1. 小的存左边

  2. 大的存右边

  3. 一样的不存

遍历
  1. 前序遍历:当前节点 左子节点 右子节点

  2. 中序遍历:左子节点 当前节点 右子节点

  3. 后序遍历:左子节点 右子节点 当前节点

  4. 层序遍历:一层一层的去遍历

 

平衡二叉树

规则:任意节点左右子树高度差不超过1

左旋

  1. 以不平衡的点作为支点

  2. 把支点左旋降级,变成左子节点

  3. 晋升原来的右子节点

  4. 以不平衡的点作为支点

  5. 将根节点的右侧往左拉

  6. 原来的右子节点变成新的父节点,并把多余的左子节点出让,给已经降级的根节点当右子节点

平衡二叉树需要旋转的四种情况
  1. 左左:当根节点左子树的左子树有节点插入,导致不平衡(一次右旋)

  2. 左右:当根节点左子树的右子树有节点插入(先局部左旋,再整体右旋)

  3. 右右:根节点右子树的右子树有节点插入(一次左旋)

  4. 右左:根节点右子树的左子树有节点插入(局部右旋,再整体左旋)

 

红黑树

  • 是一个二叉查找树

  • 但不是高度平衡的

  • 条件:特有的红黑规则

 

规则:
  1. 每一个节点是红色或黑色的

  2. 根节点必须是黑色

  3. 如果一个节点没有子节点或父节点,则该节点相应的指针属性值为NIL,这些NIL视为叶节点

  4. 两个红色节点不能相连

  5. 任意节点到所有后代叶结点的简单路径上,黑色节点数量相同

 

添加节点

默认颜色是红色效率高

 

根——>直接变黑色

 

|————>父黑色(不操作)

|

| |——>叔叔红色 1. 将父设为黑色,将叔设为黑色

非根 | 2. 将祖父设为红色

| | 3. 如果祖父为根,再将根变回黑色

| | 4. 如果祖父非根,将祖父设为当前节点再判断

| |

|————>父红色————>叔叔黑色(当前节点时父的右孩子)—>把父设为当前节点并左旋再进行判断

|

|——>叔叔黑色(当前节点是父的左孩子)—>1. 将父设为黑色

2.将祖父变为红色

3.以祖父为支点右旋

 

红黑树的增删改查性能很好

posted @   java贼溜  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示