Java-各种树

专业词

  • 深度;从根节点到最底层的距离(节点的个数)叫深度;

1.二叉树

  • 概念:每个节点最多只能有两个子节点的叫二叉树

    满二叉树
  • 二叉树的所有叶子节点都在最后一层,并且节点总数=2^n - 1 ,则称为满二叉树

    完全二叉树
  • 该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子结点在左边连续,倒数第二层的叶子结点在右边连续,我们称之为完全二叉树。

遍历二叉树

前序,中序,后序三种遍历方式

  • 前序遍历:先输出父节点,在遍历左子树和右子树;
  • 中序遍历, 先遍历左子树, 再输出父节点, 再遍历右子树
  • 后序遍历, 先遍历左子树, 再遍历右子树, 最后输出父节点

二叉搜索数(使用的是二分查找算法的树)

特性

  • 每个节点最多拥有两个子节点,即每个节点都是一个小的二叉树
  • 比父节点小的放左边
  • 比父节点大的放右边

优点:拥有链表快速删除,增加的特性,同时具有快速查找的优势

缺点:由于数据原因,可能会造成左右两边深度过大,不平衡。甚至可能变成斜树,即退化成链表。

平衡二叉树(AVL树)

  • 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,超过1就会失衡 。并且左右两个子树都是一棵平衡二叉树。

添加节点

  • 往平衡二叉树中添加节点很可能会导致二叉树失去平衡,所以我们需要在每次插入节点后进行平衡的维护操作。插入节点破坏平衡性有如下四种情况:

右右旋转

左左旋转

左右旋转

右左旋转

红黑树

出现原因 由于平衡二叉树严格的平衡条件,频繁 的插入,删除操作,旋转次数变多,也会影响增加删除效率

目的:为了减少删除和插入的频率,就引入了红黑树的概念;

红黑在AVL树基础上增加四条,变更一条规则。

  • 节点只有红黑两色。
  • 根节点是黑色
  • 所有的叶子节点都是黑色,()都是空节点。
  • 根节点到叶子节点的一条路径上不能有连续的红色节点。
  • 变更 深度差不能超过1,改为从任意节点出发,到每个子节点的黑色节点深度必须相等。
目的:利用红黑两色的变换(变色),去替代一部分旋转操作。
posted @   a-tao必须奥利给  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示