算法随笔 — 树结构基础 — 二叉树

本文深入探讨二叉树的基础知识,包括其定义、性质、完全二叉树与满二叉树的区别,以及二叉树在数据结构和算法中的应用。讲解了前序、中序和后序遍历,并介绍了二叉树在解决实际问题中的角色,如平衡二叉树、路径总和等。此外,还讨论了如何通过递归解决相关LeetCode问题,以提升编程技能。
摘要由CSDN通过智能技术生成

二叉树是什么

二叉树是一种重要的树形结构
二叉树概念图
n叉树的n是指有最多连接数的节点的连接数

二叉树具有如下性质

  • 每个节点的度最多为2 (0 ≤ 实际节点的连接数 ≤ 2)
  • 度为0的节点比度为2的节点多一个
    证明: 根据度的定义可知,度为1的节点有一条边,度为2的节点有两条边 令 n 0 为 有 0 条 边 的 节 点 数 、 n 1 为 有 1 条 边 的 节 点 数 、 n 2 为 有 2 条 边 的 节 点 数 ∵ n 个 节 点 的 树 有 n − 1 条 边 ∴ n 0 + n 1 + n 2 = n 1 + 2 n 2 + 1 n 0 = n 2 + 1 令n_0为有0条边的节点数、n_1为有1条边的节点数、 n_2为有2条边的节点数\\ \because n个节点的树有n-1条边 \\ \therefore n_0+n_1+n_2=n_1+2n_2+1 \\ n_0=n_2+1 n00n11n22nn1n0+n1+n2=n1+2n2+1n0=n2+1

二叉树遍历:

  • 前序:根 -> 左 -> 右
  • 中序:左 -> 根 -> 右
  • 后序:左 -> 右 -> 根
  • … (在后续文章中补充)

二叉树的拓展概念

完全二叉树
只有在最后一层的右侧缺少的树
完全二叉树
完全二叉树是一个很有意思的也很有用的树形结构,它有一个特点,一个编号为i的节点,其左子编号为: 2 ∗ i 2*i 2i,其右子编号为: 2 ∗ i + 1 2*i+1 2i+1

根据此性质,我们可以不用通过对象的形式创建节点和建立节点之间的连接,而是可以利用连续空间存储(如数组)

通过这个性质我们可以实现一二维的转换
树形结构和数组的转换
当然了,从0开始计数的话编号为i的节点的左子编号是 2 ∗ i + 1 2*i+1 2i+1,右子编号是 2 ∗ i + 2 2*i+2 2i+2,性质没有发生变化,只是做了一下数学上的转换

当然,这种通过计算得到节点和通过记录得到节点的方式没有绝对的好与坏,具体问题具体分析。当需要节省空间的时候我们可以考虑利用计算式的结构存储,当需要节省时间的时候我们可以考虑利用记录式的方式存储

满二叉树
没有度为1的节点的二叉树
满二叉树
完美二叉树
没有度为1的节点同时每一层都满的二叉树
完美二叉树


二叉树作用

  • 完全二叉树
    • 维护集合最值
      • 优先队列
  • 多叉树/森林
    • 字符串及相关转换问题
      • 字典树
      • AC自动机
    • 连通性问题
      • 并查集
  • 二叉排列树
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值