Day 23 | 二叉树总结

本文详细介绍了二叉树的基本理论,包括其种类、存储方式、遍历方法(深度优先、广度优先等),并深入探讨了如何求解二叉树的对称性、深度、最小深度、节点数量、平衡性等属性,以及二叉搜索树的搜索、插入、删除操作和公共祖先问题。强调了二叉树构造与特定属性求解时的前序与中序策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考 代码随想录

二叉树理论知识

二叉树的种类,存储方式,遍历方式

二叉树的遍历方式

深度优先遍历:

  • 前中后序遍历
  • 前中后序迭代法(一):通过栈模拟递归

广度优先遍历:

  • 层次遍历:通过队列模拟

求二叉树的属性

  • 是否对称
    • 后序,比较的是根节点的左子树与右子树是不是相互翻转
  • 求最大深度
    • 后序,求根节点最大高度就是最大深度,通过递归函数的返回值做计算树的高度
  • 求最小深度
    • 后序,求根节点最小高度就是最小深度,注意最小深度的定义
  • 求有多少节点
    • 后序,通过递归函数的返回值计算节点数量
  • 是否平衡
    • 后序,注意后序求高度和前序求深度,递归过程判断高度差
  • 找所有路径 II
    • 前序,方便让父节点指向子节点,涉及回溯处理根节点到叶子的所有路径
  • 求左叶子之和
    • 后序,必须三层约束条件,才能判断是否是左叶子
  • 求左下角的值
    • 顺序无所谓,优先左孩子搜索,同时找深度最大的叶子节点。
  • 求路径总和
    • 顺序无所谓,递归函数返回值为bool类型是为了搜索一条边,没有返回值是搜索整棵树。

二叉树的修改与构造

  • 翻转二叉树
    • 递归:前序,交换左右孩子
  • 构造二叉树
    • 递归:前序,重点在于找分割点,分左右区间构造
  • 构造最大的二叉树
  • 合并两个二叉树
    • 递归:前序,同时操作两个树的节点,注意合并的规则

求二叉搜索树的属性

  • 二叉搜索树中的搜索
    • 二叉搜索树的递归是有方向的
  • 是不是二叉搜索树
    • 中序,相当于变成了判断一个序列是不是递增的
  • 求二叉搜索树的最小绝对差
    • 中序,双指针操作
  • 求二叉搜索树的众数
    • 递归:中序,清空结果集的技巧,遍历一遍便可求众数集合
  • 二叉搜索树转成累加树
    • 递归:中序,双指针操作累加

二叉树公共祖先问题

  • 二叉树的公共祖先问题
    • 递归:后序,回溯,找到左子树出现目标值,右子树节点目标值的节点。
  • 二叉搜索树的公共祖先问题
    • 递归:顺序无所谓,如果节点的数值在目标区间就是最近公共祖先

二叉搜索树的修改与构造

  • 二叉搜索树中的插入操作
    • 递归:顺序无所谓,通过递归函数返回值添加节点
  • 二叉搜索树中的删除操作
    • 递归:前序,想清楚删除非叶子节点的情况
  • 修剪二叉搜索树
    • 递归:前序,通过递归函数返回值删除节点
  • 构造二叉搜索树
    • 递归:前序,数组中间节点分割

最后总结

  1. 涉及二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。
  2. 求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。
  3. 求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。

注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序,二叉树:找所有路径 (opens new window)也用了前序,这是为了方便让父节点指向子节点。

所以求普通二叉树的属性还是要具体问题具体分析。

二叉树专题汇聚为一张图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值