javascript 数据结构专题--二叉树概览

一 定义

树是用来模拟具有树状结构性质的数据集合,是n(n>=0)个结点的有限集,n=0时称为空树。在任意一颗非空树中:

1)"有且仅有"一个特定的称为根(Root)的结点;

2)当n>1时,其余结点可分为m(m>0)个"互不相交"的"有限集(数量没有限制)"T1、T2、…、Tn,其中每一个集合本身又是一棵树,并且称为根的子树。

  • 结点:包含一个数据元素及若干指向子树分支的信息,树最基本的数据结构单元。
  • 节点的度:结点拥有的子树数目称为结点的度
  • 叶子节点:终端结点,没有子树的结点或者度为零的结点
  • 分支结点:也称为非终端结点,度不为零的结点称为非终端结点
  • 结点的层次:从根结点开始,假设根结点为第1层,根结点的孩子结点为第2层,依此类推,如果某一个结点位于第L层,则其孩子结点位于第L+1层
  • 树的深度:树中结点的最大层次数(根节点到最远叶子节点的最长路径上的节点数)
  • 有序树:如果树中各棵子树的次序是有先后次序,则称该树为有序树
  • 无序树:如果树中各棵子树的次序没有先后次序,则称该树为无序树
  • 森林:由m(m≥0)棵互不相交的树构成一片森林(把一棵非空的树的根结点删除,则该树就变成了一片森林,森林中的树由原来根结点的各棵子树构成)

二叉树

二叉树是树最简单、应用最广泛的种类。

二叉树是n(n>=0)个结点的有限集合,空集为空二叉树,通常由根节点,分支节点,叶子节点组成,每个节点最多只有两个分支节点。而每个分支节点也常常被称作为一棵子树,分为“左子树”和“右子树”。

  • 根节点:二叉树最顶层的节点
  • 分支节点:除了根节点以外且拥有叶子节点
  • 叶子节点:除了自身,没有其他子节点

二 性质

1、在二叉树的第i层上,至多有2^i-1个节点

i=1时,只有一个根节点,2^(i-1) = 2^0 = 1

2、深度为k的二叉树至多有2^k-1个节点, 反过来具有n个节点的完全二叉树深为log2x+1(其中x表示不大于n的最大整数)

i=2时,2^k-1 = 2^2 - 1 = 3个节点

3、对任何一棵二叉树T,如果总结点数为n0,度为2(子树数目为2)的节点数为n2,则n0=n2+1

4、若对一棵有n个节点的完全二又树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点

  • 当i=1时,该节点为根,它无双亲节点 [6] 。
  • 当i>1时,该节点的双亲节点的编号为i/2 [6] 。
  • 若2i≤n,则有编号为2的左孩子,否则没有左孩子 [6] 。
  • 若2+1≤n,则有编号为2i+1的右孩子,否则没有右孩子 [6

三 树和二叉树的三个主要差别

1、树的节点个数至少为1,而二叉树的节点个数可以为0

2、树中节点的最大度数(节点数量)没有限制,而二叉树的节点的最大度数为2

3、树的节点没有左右之分,而二叉树的节点有左右之分,左子树和右子树是有顺序的,次序不能任意颠倒即使树中某结点只有一棵子树,也要区分它是左子树还是右子树

四 二叉树分类

一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树
。一般我们需要了解完全二叉树(complete binary tree)和满二叉树(full binary tree)。

平衡二叉树:左右子树深度之差大于1

满二叉树:一棵深度为k且有2^k - 1个节点的二叉树称为满二叉树

完全二叉树:完全二叉树是指最后一层左边是满的,右边可能满也可能不满,然后其余层都是满的二叉树称为完全二叉树(满二叉树也是一种完全二叉树)

五 二叉树相关操作算法

1、二叉树遍历

重点中的重点,最好同时掌握递归和非递归版本,递归版本很容易书写,但是真正考察基本功的是非递归版本。

  • 二叉树的中序遍历
  • 二叉树的前序遍历
  • 二叉树的后序遍历

根据前序遍历和中序遍历的特点重建二叉树,逆向思维,很有意思的题目

2、二叉树的对称性

  • 对称的二叉树
  • 二叉树的镜像

3、二叉搜索树

二叉搜索树是特殊的二叉树,考察二叉搜索树的题目一般都是考察二叉搜索树的特性,所以掌握好它的特性很重要

  • 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  • 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  • 任意节点的左、右子树也需要满足左边小右边大的性质

3、二叉树的深度

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数

平衡二叉树:左右子树深度之差大于1

  • 二叉树的最大深度
  • 二叉树的最小深度
  • 平衡二叉树

4、 二叉树基本操作

创建、插入、查找、删除、遍历、深度
下一篇 javascript 数据结构专题–二叉树基本操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值