数据结构论坛

首页 » 分类 » 常识 » 数据结构与算法数据结构之二叉树
TUhjnbcbe - 2021/7/17 0:44:00
北京专治皮肤科医院 http://m.39.net/pf/a_4651553.html
数据结构--二叉树目录1、二叉树的分类2、二叉树的存储方式3、二叉树的遍历方式4、二叉树的节点定义1、二叉树的分类满二叉树完全二叉树二叉搜索树平衡二叉搜索树

二叉树

二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构。

二叉树的定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i-1个结点;深度为k的二叉树至多有2k-1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

二叉树的实例:

满二叉树和完全二叉树

满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值,所有叶子结点必须在同一层上。
  满二叉树的性质:
  1)一颗树深度为h,最大层数为k,深度与最大层数相同,k=h;
  2)叶子数为2h;
  3)第k层的结点数是:2k-1;
  4)总结点数是:2k-1,且总节点数一定是奇数。

完全二叉树

若设二叉树的深度为h,除第h层外,其它各层(1~(h-1)层)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。

注:完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树。

 二叉树的性质


  1)在非空二叉树中,第i层的结点总数不超过2i-1,i=1;
  2)深度为h的二叉树最多有2h-1个结点(h=1),最少有h个结点;
  3)对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
  4)具有n个结点的完全二叉树的深度为log2(n+1);
  5)有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
  
  若I为结点编号则如果I1,则其父结点的编号为I/2;
  
  如果2I=N,则其左儿子(即左子树的根结点)的编号为2I;若2IN,则无左儿子;
  
  如果2I+1=N,则其右儿子的结点编号为2I+1;若2I+1N,则无右儿子。
  6)给定N个节点,能构成h(N)种不同的二叉树,其中h(N)为卡特兰数的第N项,h(n)=C(2*n,n)/(n+1)。7)设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i。-----------------------------------------------------------------------------平衡二叉搜索树平衡二叉搜索树:又被称为AVL(Adelson-VelskyandLandis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如图:最后一棵不是平衡二叉树,因为它的左右两个子树的高度差的绝对值超过了1C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_map底层实现是哈希表。所以大家使用自己熟悉的编程语言写算法,一定要知道常用的容器底层都是如何实现的,最基本的就是map、set等等,否则自己写的代码,自己对其性能分析都分析不清楚!极简编程圈

感谢您的

1
查看完整版本: 数据结构与算法数据结构之二叉树