算法学习01——树(一)

本文梳理了一些关于数据结构中树的学习,有什么不对的地方请尽情打脸

预备知识

  • 树:一些节点的集合
  • 树叶:没有儿子的节点
  • 路径:节点n1,n2,…,nk的一个序列,使得对于1<=i<k节点ni是ni+1的父亲
  • 长:是为该路径上的边的条数,即k-1。从每一个节点到它自己有一条长为0的路径
  • 深度:任意节点ni, ni的深度为根到ni的唯一路径长
  • 高:ni的高是从ni到一片树叶的最长路径的长

二叉树相关性质

二叉树查找树的平均深度为O(logN)

N为节点序号,k为对应的深度, depth为平均深度,不严谨证明如下

∵ 2 k < = N < 2 k + 1 ∴ k < = l o g 2 ( N ) < k + 1 ∴ k = ⌊ l o g 2 ( N ) ⌋ ∴ d e p t h = ∑ N = 1 n ⌊ l o g 2 ( N ) ⌋ n \begin{aligned} &∵& 2^{k}<=N<2^{k+1}\\ &∴& k<=log_2 {(N)} < k+1\\ &∴& k=\lfloor log_2 {(N)} \rfloor\\ &∴& depth= {\frac {\sum_{N=1}^{n}{\lfloor log_2 {(N)} \rfloor}}{n}} \end{aligned} 2k<=N<2k+1k<=log2(N)<k+1k=log2(N)depth=nN=1nlog2(N)
上述式子小于
∑ N = 1 n l o g 2 ( N ) n < n l o g 2 ( n ) n = l o g 2 ( n ) \begin{aligned} & & {\frac {\sum_{N=1}^{n}{ log_2 {(N)} }}{n}}\\ &<& \frac {n log_2{(n)}}{n}\\ &=& {log_2{(n)}} \end{aligned} <=nN=1nlog2(N)nnlog2(n)log2(n)
由此可见平均深度为O(logN)

N个节点的二叉树都需要N+1个null链

采用数学归纳法证明结论
当仅有一个节点时,即根节点,显然有2=1+1个null链
设存在当n=N时,存在N+1个null链
那么当n=N+1时,在原二叉树中增加了一个节点,进行了以下步骤:

  1. 减少一个null链
  2. 增加一个节点
  3. 该节点增加了两个null链
    于是存在N+2个null链

二叉树的相关应用:表达式树

表达式树的树叶是操作数,一般为常数或者变量名
其他节点是操作符

总结

  • markdown的数学公式用着实在是不习惯
  • 相关内容来自《Data Structures and Algorithm Analysis in Java》第四章第1、2节
  • 树方面的内容打算整理成
    1. 树的基本内容
    2. 二叉查询树的java实现
    3. AVL树
    4. 伸展树
    5. B树
  • 看得出基本按照《Data Structures and Algorithm Analysis in Java》书中第四章的脉络进行
  • 有什么不对的地方请尽情打脸
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值