【自考】数据结构导论——二叉树

前言

       

       自考学习如火如荼进行着,看书,画导图,做题,讨论,小组学习的热情依然是我们自考学习中的强心针。上次博客简单总结了下老师对于数据库结构导论的学习方法。本篇博客简单总结了,二叉树的相关知识,希望能给读者带来收获。下图是二叉树知识点思维导图。

        


 

 

基本概念

 

       二叉树(Binary Tree)是n个元素的有限集合,该集合或者为空,或者由一根及两根互不相交的左子树和右子树组成,其中左子树和右子树也均为二叉树。

       二叉树的任一一个结点都有两棵子树,两棵子树之间是有次序关系的,左右子树分别成为该结点的左孩子和右孩子。

       二叉树有五种基本形态。如下图所示(方块代表的是子树)分别为空二叉树,左右子树均为空的二叉树,右子树为空的二叉树,左子树为空的二叉树,左右子树都为非空的二叉树。

           


           

性质

       

       二叉树的5个性质,在做题过程中遇到的比较频繁,性质是重点哦~

 

         NO.1二叉树第ii>=1)层上至多有 2 i-1次方个结点。

         NO.2深度为k(k>=1)的二叉树至多有 2k次方-1个结点。

        NO.3对任何一棵二叉树,若度数为0的结点(叶结点)个数为n0,度数为2的结点个数为n2,则n0=n2+1

        NO.4 含有n个结点的完全二叉树的深度为log2为底n的对数 1

        NO.5 如果将一棵有n个结点的完全二叉树按层编号。对任一编号为i的结点A有:

                1)若i=1,则结点A是根;若i>1,A的双亲ParentA)的编号为[i/2];

                2)若2*i>n,则结点A既无左孩子,也无右孩子;否则A的左孩子LchildX)的编号为2*i

                3)若2*i+1>n,则结点A无右孩子;否则,A的右孩子Rchild(A)的编号为2*i+1

 

       满二叉树:深度为kk>=1)且有2k次方减1个结点的二叉树成为满二叉树。结合性质2,满二叉树的结点数已经达到了二叉树可以容纳的最大值。    

                             


     

 

       完全二叉树:如果对满二叉树按从上到下,从左到右的顺序编号,并在最下一层删去部分结点(删后最后一层仍有结点),如果删除的这些结点的编号是连续的且删除的结点中含有最大编号的结点,那么这棵二叉树就是完全二叉树。如下图:

                                          


 

 

      

       下面的两个例子,就是非完全二叉树。

                                               

                             

        

       从上面定义我们可知,满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

 

链式存储

 

       在二叉链表中,data域用于存储二叉树结点中的数据信息,lchild是指向左孩子的指针,rchild是指向右孩子的指针。每个二叉树表还必须有一个指向根结点的指针。该指针成为根指针。

       下图是二叉链表的结点结构:

     


       

       二叉树对应的二叉链表示意图:

                


 

          

       Tip如果二叉树为空,则root=NULL。若某结点的某个孩子不存在,则相应的指针为空,具有n个结点的二叉树中,有2n个指针域,其中只有n-1个用来指向结点的左、右孩子,其余的n+1个指针域为NULL

  

遍历

         

       二叉树的遍历是指按照某种次序访问二叉树上所有结点,使每个结点被访问一次且仅被访问一次。

       按照某种次序执行下面三步,就可以遍历整个二叉树。

         1.访问根节点。

         2.遍历根左子树(依次访问左子树上全部)

         3.遍历根的右子树(一次访问右子树上的全部结点)

 

        *递归实现遍历有先序,中序,后序三种次序。

 

              先序遍历:访问根结点——>先序遍历左子树——>先序遍历右子树

        中序遍历:中序遍历左子树——>访问根结点——>中序遍历右子树

        后序遍历:后序遍历左子树——>后序遍历右子树——>访问根结点

 

       *层次遍历就是从二叉树的根结点这一层开始,逐层向下遍历,在每一层上按从左到右的顺序对结点逐个访问。

                                       

小结         


       本篇博客介绍了二叉树的概念,5个重要的性质,链式存储,遍历等知识,希望能给读者带来一些收获~~谢谢阅读~

 

1. 什么是二叉树二叉树是一种结构,其中每个节点最多有两个子节点。一个节点的左子节点比该节点小,右子节点比该节点大。二叉树通常用于搜索和排序。 2. 二叉树的遍历方法有哪些? 二叉树的遍历方法包括前序遍历、中序遍历和后序遍历。前序遍历是从根节点开始遍历,先访问根节点,再访问左子,最后访问右子。中序遍历是从根节点开始遍历,先访问左子,再访问根节点,最后访问右子。后序遍历是从根节点开始遍历,先访问左子,再访问右子,最后访问根节点。 3. 二叉树的查找方法有哪些? 二叉树的查找方法包括递归查找和非递归查找。递归查找是从根节点开始查找,如果当前节点的值等于要查找的值,则返回当前节点。如果要查找的值比当前节点小,则继续在左子中查找;如果要查找的值比当前节点大,则继续在右子中查找。非递归查找可以使用栈或队列实现,从根节点开始,每次将当前节点的左右子节点入栈/队列,直到找到要查找的值或者栈/队列为空。 4. 二叉树的插入与删除操作如何实现? 二叉树的插入操作是将要插入的节点与当前节点的值进行比较,如果小于当前节点的值,则继续在左子中插入;如果大于当前节点的值,则继续在右子中插入。当找到一个空节点时,就将要插入的节点作为该空节点的子节点。删除操作需要分为三种情况:删除叶子节点、删除只有一个子节点的节点和删除有两个子节点的节点。删除叶子节点很简单,只需要将其父节点的对应子节点置为空即可。删除只有一个子节点的节点,需要将其子节点替换为该节点的位置。删除有两个子节点的节点,则可以找到该节点的后继节点(即右子中最小的节点),将其替换为该节点,然后删除后继节点。 5. 什么是平衡二叉树? 平衡二叉树是一种特殊的二叉树,它保证左右子的高度差不超过1。这种平衡可以确保二叉树的查找、插入和删除操作的时间复杂度都是O(logn)。常见的平衡二叉树包括红黑和AVL
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值