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.以祖父为支点右旋

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值