Java中树的详细解释是什么?

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