Java中树的详细解释是什么?
摘要:JAVA之树的详解 度:每一个结点的子节点数量 树高:树的总层数 根节点:最顶层的节点 左子节点:左下方的节点 右子节点:右下方的节点 二叉查找树 特点 每一个节点上最多有两个子节点 任意节点左子树上的值都小于当前节点 任意节点右子树的值都
JAVA之树的详解
度:每一个结点的子节点数量
树高:树的总层数
根节点:最顶层的节点
左子节点:左下方的节点
右子节点:右下方的节点
二叉查找树
特点
每一个节点上最多有两个子节点
任意节点左子树上的值都小于当前节点
任意节点右子树的值都大于当前节点
添加节点规则
小的存左边
大的存右边
一样的不存
遍历
前序遍历:当前节点 左子节点 右子节点
中序遍历:左子节点 当前节点 右子节点
后序遍历:左子节点 右子节点 当前节点
层序遍历:一层一层的去遍历
平衡二叉树
规则:任意节点左右子树高度差不超过1
左旋
以不平衡的点作为支点
把支点左旋降级,变成左子节点
晋升原来的右子节点
以不平衡的点作为支点
将根节点的右侧往左拉
原来的右子节点变成新的父节点,并把多余的左子节点出让,给已经降级的根节点当右子节点
平衡二叉树需要旋转的四种情况
左左:当根节点左子树的左子树有节点插入,导致不平衡(一次右旋)
左右:当根节点左子树的右子树有节点插入(先局部左旋,再整体右旋)
右右:根节点右子树的右子树有节点插入(一次左旋)
右左:根节点右子树的左子树有节点插入(局部右旋,再整体左旋)
红黑树
是一个二叉查找树
但不是高度平衡的
条件:特有的红黑规则
规则:
每一个节点是红色或黑色的
根节点必须是黑色
如果一个节点没有子节点或父节点,则该节点相应的指针属性值为NIL,这些NIL视为叶节点
两个红色节点不能相连
任意节点到所有后代叶结点的简单路径上,黑色节点数量相同
添加节点
默认颜色是红色效率高
根——>直接变黑色
|————>父黑色(不操作)
|
| |——>叔叔红色 1. 将父设为黑色,将叔设为黑色
非根 | 2. 将祖父设为红色
| | 3. 如果祖父为根,再将根变回黑色
| | 4. 如果祖父非根,将祖父设为当前节点再判断
| |
|————>父红色————>叔叔黑色(当前节点时父的右孩子)—>把父设为当前节点并左旋再进行判断
|
|——>叔叔黑色(当前节点是父的左孩子)—>1. 将父设为黑色
2.将祖父变为红色
3.以祖父为支点右旋
红黑树的增删改查性能很好
