> 文档中心 > 树以及二叉树的介绍

树以及二叉树的介绍


📋 个人简介

  • 💖 作者简介:大家好,我是菀枯😜

  • 🎉 支持我:点赞👍+收藏⭐️+留言📝

  • 💬格言:不要在低谷沉沦自己,不要在高峰上放弃努力!☀️

    树以及二叉树的介绍

    前言

之前我们学习了顺序表和链表,然后用他们分别实现了两种特殊的线性表栈和队列,今天我们再来看一种新的数据结构:

树的概念

树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  • 每个节点有零个或多个子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树

下图就是一颗树(画的不是很对称,强迫症勿怪)🙏树以及二叉树的介绍

注意:树形结构中子树之间不能有交集,不然就不能称作树

树以及二叉树的介绍

树的相关概念

树以及二叉树的介绍

让我们来看看上面一颗树,各个节点之间的相互关系是什么

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为3

叶节点或终端节点:度为0的节点称为叶节点; 如上图:J,F,K,L,H,I等节点为叶节点

非终端节点或分支节点:度不为0的节点; 如上图:B,C,D…等节点为分支节点

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的子节点

兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点

树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为3

节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

树的高度或深度:树中节点的最大层次; 如上图:树的高度为4

堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、G互为兄弟节点

节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙

森林:由m(m>0)棵互不相交的树的集合称为森林

树的表示方法

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法

树以及二叉树的介绍

对于这样一颗树,我们可以使用下面的方式来存储它

树以及二叉树的介绍

树以及二叉树的介绍

二叉树

二叉树的概念

二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树

通俗易懂的讲,就是一颗树,最多只能有两个分叉 (这是我自己的看法,哪儿说的不对,还请大佬指正)树以及二叉树的介绍

二叉树的五种形态

  1. 空二叉树:

    树以及二叉树的介绍

  2. 只有一个根节点的二叉树:

    树以及二叉树的介绍

  3. 只有左子树:

    树以及二叉树的介绍

  4. 只有右子树:

    树以及二叉树的介绍

  5. 完全二叉树:

树以及二叉树的介绍

特殊的二叉树

  1. . 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 2 k −1 2^k - 12k1树以及二叉树的介绍

  2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K

    的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对

    应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。树以及二叉树的介绍

二叉树的性质

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2 ( i−1) 2^(i-1)2(i1)个结点。
  2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2 h −1 2^h - 12h1
  3. 对任何一棵二叉树, 如果度为0其叶结点个数为 n 0 n_0n0 , 度为2的分支结点个数为 n 2 n_2n2 ,则有 n 0 = n 2 +1 n_0 = n_2 + 1n0=n2+1
  4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度h= log ⁡2 (n+1) \log_2(n + 1)log2(n+1)
  5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:
    1. 若i>0,i位置节点的双亲序号:(i-1)/2; i=0,i为根节点编号,无双亲节点
    2. 若2i+1<n,左孩子序号:2i+1;否则,无左孩子
    3. . 若2i+2<n,右孩子序号:2i+2;否则,无右孩子

结语

欢迎各位参考与指导!!!博主最近在冲击C/C++领域新人,拜托大家帮忙点赞收藏一下❤️

树以及二叉树的介绍

闲鱼礼物网