二叉树与红黑树核心知识点及面试重点

news2025/4/8 15:14:59

二叉树与红黑树核心知识点及面试重点


一、二叉树 (Binary Tree)
1. 基础概念
  • 定义:每个节点最多有两个子节点(左子节点和右子节点)

  • 术语

    • 根节点:最顶层的节点

    • 叶子节点:没有子节点的节点

    • 深度:从根到节点的路径长度

    • 高度:从节点到最深叶子节点的路径长度

2. 常见类型
类型特点
满二叉树所有非叶子节点都有两个子节点,且所有叶子在同一层
完全二叉树除最后一层外,其他层必须填满,最后一层从左到右连续填充
二叉搜索树(BST)左子树所有节点值 < 根节点值 < 右子树所有节点值(中序遍历有序)
平衡二叉树任意节点的左右子树高度差不超过1(如AVL树)
3. 遍历方式(重点!)
  • 前序遍历:根 → 左 → 右

    java

    void preOrder(TreeNode root) {
        if (root == null) return;
        System.out.print(root.val + " ");
        preOrder(root.left);
        preOrder(root.right);
    }

    中序遍历:左 → 根 → 右(BST中序遍历结果为升序)

  • 后序遍历:左 → 右 → 根

  • 层序遍历:按层级从上到下、从左到右(BFS实现)

4. 面试高频问题
  1. 二叉树的最大深度

    java

    int maxDepth(TreeNode root) {
        return root == null ? 0 : 
            1 + Math.max(maxDepth(root.left), maxDepth(root.right));
    }

    判断是否为平衡二叉树
    (需同时检查高度差和左右子树是否平衡)

  2. 二叉树的最近公共祖先(LCA)
    (分治思想,递归查找左右子树)


二、红黑树 (Red-Black Tree)
1. 核心性质

红黑树是自平衡的二叉搜索树,满足以下规则:

  1. 节点颜色:每个节点非红即黑

  2. 根节点:必须为黑色

  3. 叶子节点(NIL):虚拟的黑色空节点

  4. 红色节点规则:红色节点的子节点必须为黑色(不能有连续红节点)

  5. 黑高平衡:从任一节点到其叶子节点的所有路径包含相同数量的黑色节点

2. 平衡操作(关键面试点)
  • 左旋/右旋:调整树结构保持平衡

    java

    // 伪代码示例:左旋
    void leftRotate(Node x) {
        Node y = x.right;
        x.right = y.left;
        if (y.left != nil) y.left.parent = x;
        y.parent = x.parent;
        // ... 更新父节点指向
    }

    颜色翻转:插入/删除后通过变色和旋转恢复平衡

3. 与AVL树的对比
特性红黑树AVL树
平衡标准黑高平衡(宽松)严格高度平衡(左右子树高度差≤1)
插入/删除最多2次旋转可能需O(log n)次旋转
查询效率O(log n),但常数项比AVL大更快的查询(严格平衡)
应用场景Java HashMap, TreeMap数据库索引等高频查询场景
4. 时间复杂度
操作时间复杂度原因
插入O(log n)自平衡调整
删除O(log n)最多3次旋转
查找O(log n)近似平衡的二叉搜索树
5. 面试高频问题
  1. 红黑树如何保证平衡?
    (结合插入/删除的变色和旋转规则回答)

  2. 为什么Java的HashMap链表长度超过8转红黑树?
    (哈希冲突时,红黑树将查找时间从O(n)优化到O(log n))

  3. 手写红黑树的插入逻辑
    (需掌握case分析,如叔节点为红/黑时的不同处理)


三、实战代码片段
红黑树节点定义

java

class RBNode<K extends Comparable<K>, V> {
    K key;
    V value;
    RBNode<K,V> left, right, parent;
    boolean color; // RED or BLACK
}
检查红黑树有效性

java

boolean isRBTreeValid(RBNode root) {
    if (root == null) return true;
    // 规则2:根节点必须为黑
    if (root.color != BLACK) return false;
    // 检查每条路径的黑高相同
    int blackHeight = getBlackHeight(root);
    return checkRedBlackRules(root, blackHeight, 0);
}

四、常见面试题
  1. 二叉树

    • 如何序列化/反序列化二叉树?

    • 如何实现二叉树的层次遍历?

    • 判断两棵二叉树是否相同?

  2. 红黑树

    • 为什么红黑树的效率比AVL树更适合Java集合类?

    • 红黑树的插入删除过程中,有哪些情况需要处理?

    • 如何证明红黑树的高度是O(log n)?


掌握这些核心知识点后,你就能在面试中游刃有余地应对树结构相关问题!红黑树的实现细节较复杂,建议结合可视化工具(如Red-Black Tree Visualizer)加深理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载诊断架构 --- 整车重启先后顺序带来的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

【C++11(下)】—— 我与C++的不解之缘(三十二)

前言 随着 C11 的引入&#xff0c;现代 C 语言在语法层面上变得更加灵活、简洁。其中最受欢迎的新特性之一就是 lambda 表达式&#xff08;Lambda Expression&#xff09;&#xff0c;它让我们可以在函数内部直接定义匿名函数。配合 std::function 包装器 使用&#xff0c;可以…

Windows 10/11系统优化工具

家庭或工作电脑使用时间久了&#xff0c;会出现各种各样问题&#xff0c;今天给大家推荐一款专为Windows 10/11系统设计的全能优化工具&#xff0c;该软件集成了超过40项专业级实用程序&#xff0c;可针对系统性能进行深度优化、精准调校、全面清理、加速响应及故障修复。通过系…

浅谈在HTTP中GET与POST的区别

从 HTTP 报文来看&#xff1a; GET请求方式将请求信息放在 URL 后面&#xff0c;请求信息和 URL 之间以 &#xff1f;隔开&#xff0c;请求信息的格式为键值对&#xff0c;这种请求方式将请求信息直接暴露在 URL 中&#xff0c;安全性比较低。另外从报文结构上来看&#xff0c…

LightRAG实战:轻松构建知识图谱,破解传统RAG多跳推理难题

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 2025防失业预警&#xff1a;不会用DeepSeek-RAG建知识库的人正在被淘汰_deepseek-embedding-CSDN博客 从PDF到精准答案&#xff1a;Coze…

C++多线程编码二

1.lock和try_lock lock是一个函数模板&#xff0c;可以支持多个锁对象同时锁定同一个&#xff0c;如果其中一个锁对象没有锁住&#xff0c;lock函数会把已经锁定的对象解锁并进入阻塞&#xff0c;直到多个锁锁定一个对象。 try_lock也是一个函数模板&#xff0c;尝试对多个锁…

垃圾回收——三色标记法(golang使用)

三色标记法(tricolor mark-and-sweep algorithm)是传统 Mark-Sweep 的一个改进&#xff0c;它是一个并发的 GC 算法&#xff0c;在Golang中被用作垃圾回收的算法&#xff0c;但是也会有一个缺陷&#xff0c;可能程序中的垃圾产生的速度会大于垃圾收集的速度&#xff0c;这样会导…

Windows环境下开发pyspark程序

Windows环境下开发pyspark程序 一、环境准备 1.1. Anaconda/Miniconda&#xff08;Python环境&#xff09; 如果不怕包的版本管理混乱&#xff0c;可以直接使用已有的Python环境。 需要安装anaconda/miniconda&#xff08;python3.8版本以上&#xff09;&#xff1a;Anaconda…

SSM婚纱摄影网的设计

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…

1110+款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100+ Icons Easily Customize

1110款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100 Icons Easily Customize 产品特点 — 24 x 24 px 网格大小 — 2px 线条描边 — 所有形状都是基于矢量的 — 平滑和圆角 — 易于更改颜色 类别 &#x1f6a8; 警报和反馈 ⬆️ 箭头 &…

Llama 4 家族:原生多模态 AI 创新的新时代开启

0 要点总结 Meta发布 Llama 4 系列的首批模型&#xff0c;帮用户打造更个性化多模态体验Llama 4 Scout 是有 170 亿激活参数、16 个专家模块的模型&#xff0c;同类中全球最强多模态模型&#xff0c;性能超越以往所有 Llama 系列模型&#xff0c;能在一张 NVIDIA H100 GPU 上运…

正则表达式(Regular Expression,简称 Regex)

一、5w2h&#xff08;七问法&#xff09;分析正则表达式 是的&#xff0c;5W2H 完全可以应用于研究 正则表达式&#xff08;Regular Expressions&#xff09;。通过回答 5W2H 的七个问题&#xff0c;我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等&#xff0c…

JMeter脚本录制(火狐)

录制前准备&#xff1a; 电脑&#xff1a; 1、将JMeter证书导入&#xff0c;&#xff08;bin目录下有一个证书&#xff0c;需要安装这个证书到电脑中&#xff09; 2、按winr&#xff0c;输入certmgr.msc&#xff0c;打开证书&#xff0c;点击下一步&#xff0c;输入JMeter证书…

基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校社团管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能结构图 局部E-R图 系统首页页面 用户…

C# Winform 入门(3)之尺寸同比例缩放

放大前 放大后 1.定义当前窗体的宽度和高度 private float x;//定义当前窗体的宽度private float y;//定义当前窗台的高度 2.接收当前窗体的尺寸大小 x this.Width;//存储原始宽度ythis.Height;//存储原始高度setTag(this);//为控件设置 Tag 属性 3.声明方法&#xff0c;获…

infinityfree最新免费建站详细教程_无需备案_5G空间_无限流量_免费域名_免费SSL

一、明确目标—是否要使用 1.为什么选择InfinityFree&#xff1f; 对于初学者、学生或只是想尝试网站搭建的个人用户来说&#xff0c;InfinityFree提供了一个绝佳的免费解决方案。这个国外免费的虚拟主机服务提供&#xff1a; 5GB存储空间 - 足以存放个人博客、作品集或小型…

打造高效英文单词记忆系统:基于Python的实现与分析

在当今全球化的世界中,掌握一门外语已成为必不可少的技能。对于许多学习者来说,记忆大量的英文单词是一个漫长而艰难的过程。为了提高学习效率,我们开发了一个基于Python的英文单词记忆系统。这个系统结合了数据管理、复习计划、学习统计和测试练习等多个模块,旨在为用户提…

node_modules\deasync: Command failed.

运行&#xff1a;“yarn install” 时报错 PS D:\WebPro\hainan-mini-program> yarn install yarn install v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... warning " > babel-loader8.2.2" has un…

游戏引擎学习第206天

回顾并为当天的工作定下目标 接着回顾了前一天的进展。之前我们做了一些调试功能&#xff0c;并且已经完成了一些基础的工作&#xff0c;但是还有一些功能需要继续完善。其中一个目标是能够展示实体数据&#xff0c;以便在开发游戏逻辑系统时&#xff0c;可以清晰地查看和检查…

Zapier MCP:重塑跨应用自动化协作的技术实践

引言&#xff1a;数字化协作的痛点与突破 在当今多工具协同的工作环境中&#xff0c;开发者与办公人员常常面临数据孤岛、重复操作等效率瓶颈。Zapier推出的MCP&#xff08;Model Context Protocol&#xff09;协议通过标准化数据交互框架&#xff0c;为跨应用自动化提供了新的…