首页 > 其他分享 >一些树的基本的东西

一些树的基本的东西

时间:2023-10-21 09:56:10浏览次数:32  
标签:基本 log2 东西 高度 二叉 搜索 二叉树 一些 节点

二叉树的定义就是1个节点上不超过2个孩子。
严格二叉树就是每一个节点上都只有2个孩子,除了叶子节点
完全二叉树就是底层可能没有填满,但是其他层一定是填满的,并且底层的节点都集中在该层的最左边的一些位置。所以完美二叉树就是完全二叉树的特例。并且完全二叉树的高度是[log2(n)]n是节点个数,[]向下取整。

关于完美二叉树:设高度为h,节点数量为n,那么n=2^(h+1)-1,可以解出来h=log2(n+1)-1。
完美二叉树中的所有的层级都会被填满。(讨论层级的话那么根节点为第0层)


一个节点的深度被定义为从根节点到该节点的路径上的边的个数。根节点为0,这里认为0即可。

一个二叉树的高度等于它的最大深度等于根节点的高度。高度是指从节点到叶子节点的最长路径上的边的个数。(这样的话就不把根节点计入高度了),只有一个节点的树的高度为0,空树的高度是-1.


对树的操作比如搜索插入删除,时间复杂度都与其高度正比,即O(h),所以一般要求树的高度越低越好,对于完美二叉树和完全二叉树来说时间复杂度是O(log2(n)),而最差情况下的稀疏树(和链表差不多)是O(n-1),如果n等于2的100次方,那么差距就会非常大。所以要求树尽量平衡。


平衡二叉树就是要求每一个节点的左孩子和右孩子的高度差diff不大于k,一般k取1.
diff=| hleft-hright |。即左子树的高度减去右子树的高度的绝对值。


一般来说创建一个二叉树可以使用链表的方式,一个数据域,二个指针域。对于1个完全二叉树可以用数组创建,左孩子的索引是2i+1,右孩子的索引是2i+2。从索引为0开始,树从左到右依次存储数据域。


二叉搜索树的特点就是任何一个节点的左孩子小于该节点,右孩子大于该节点。
二叉搜索树原来搜索为log2(n)和二分查找的O一样,没想到原理也几乎一样,对于二分查找start和end限定了搜索空间,每次查找都是使得搜索空间/2,设开始的搜索空间大小是n,假设经过了k次搜索找到了目标值,那么n/2^k=1(1表示搜索空间大小为1),那么k=log2(n),二叉搜索树同理,在每个节点上都在做选择,如果小于目标就在右树查找,大于目标了就在左树里查找,每一次都是使得搜索空间/2,直到搜索空间为1. 基于实现这样的目标必须要求尽量平衡,树越平衡,看起来更像一课树,如果像一条链表的话,O仍是O(n)。
二叉搜索树的插入和删除都会改变树的平衡性,如果平衡性被打破的很严重那么就不能按照二分搜索的方法去看时间复杂度,所以必须的调整树,使其变的平衡。另外符合搜索二叉树要求的完美二叉树是最合适的用来搜索,插入,删除的容器。


原来递归,栈,堆的调用是这样的,就这次的二叉搜索树的构造为案例,当我在main函数里执行到了insert函数时,系统在栈里给insert函数分配一个帧栈内存,然后保存这个insert函数里变量的值,接下来就是套娃,我还是画图吧比较方便。


中序遍历搜索二叉树得到一组排好序的数据。

标签:基本,log2,东西,高度,二叉,搜索,二叉树,一些,节点
From: https://www.cnblogs.com/NiShu7777/p/17778490.html

相关文章

  • QT cmake工程使用QXlsx源码操作execl,无需编译QXlsx,也不需要下载其他东西,windows和ubu
    一、下载地址:链接二、进入下载好的QXlsx目录下,取出QXlsx目录和README.md待用三、用qt创建一个简单的cmake工程,将QXlsx目录和README.md文件放到cmakelists.txt所在目录 四、修改cmakelists.txt文件cmake_minimum_required(VERSION3.5)project(xlsxTestLANGUAGESCXX)......
  • 8皇后问题用基本数据结构实现(不用stl)
    1#include<iostream>2usingnamespacestd;34#defineSTACKSIZE25656intResult;//记录结果78typedefstruct9{10introw;11intcol;12}QueenPlace;1314typedefstruct15{16QueenPlace*pBase;17......
  • 第一章:Linux的一些基本概念
    一些概念在Linux系统中,每个设备都被当成一个文件对待如,SATA接口的硬盘的文件名即为/dev/sd[a-d]。几乎所有硬件设备文件都在/dev这个目录内。窗口Linux默认会为用户提供六个终端让用户登录,切换方式:Ctrl+Alt+F1~F6其中F1对应图形用户界面模式目录当登录用户为root时,~代表......
  • vue 各种东西的顺序
    props  —》beforeCreate —》methods—》data—》computed—》watch(immediate)—》created beforeCreate会在实例初始化完成、props解析之后、data() 和 computed 等选项处理之前立即调用。 created当这个钩子被调用时,以下内容已经设置完成:响应式数据data、......
  • 基本运算
    基本运算一、算术运算符x=10y=20print(x+y)#30print(x-y)#-10print(x*y)#200print(x/y)#0.5print(x%y)#10print(x//y)#0print(x**y)#100000000000000000000二、比较运算符​ 返回的都是布尔值x=10y=20print(x>y)......
  • Windows10一些琐事的命令
    WindowsSearch关闭web搜索结果,期望的是在本地搜索,不需要替自己去搜索web,一般自己用来打开程序REGADDHKCU\SOFTWARE\Policies\Microsoft\Windows\Explorer/vDisableSearchBoxSuggestions/tREG_DWORD/d0x1/f......
  • 三种基本排序算法:桶排序,冒泡排序,快速排序
    第一节桶排序(最快最简单的排序)1、概括就实现申请大小为的数组为例,inta[11]。首先将所有变量初始化为0,表示还没有出现过任何数字。下面开始处理得到的数字:若存入的第一个数字是5,就将相对应的a[5]的值在原来的基础上增加1.即将a[5]的值从0改为1,表示5出现过一次。若第二个......
  • 04_基本元器件介绍
    基本元器件介绍晶体三极管什么是晶体三极管三极管特点三种工作状态放大状态特点:​ 1Ic=βIb​ 2Ic的大小只受Ib的控制​ 3Ie=Ic+Ib工作状态:​ 1Ib一定时,Ic的大小和Uce无关截止状态特点:​ 1Ib=0,Ic=0,Ie=Ib+Ic=0工作状态:集电极和发射极之间......
  • 05_基本放大电路
    基本放大电路电容C1和C2起到隔直通交的作用,隔绝UCc的直流电,保留Es和Uo的交流电Ucc为电路供电,使三极管大Ube>0.7V,防止进入截止区各器件的取值范围Uce为什么会被反相会出现的情况Q点与Rb的关系Q点与Vcc的关系Q点与Rc的关系不足解决方案加电容C......
  • c++ 基本语法_1
    //1.主函数里面的各个含义意思#include<iostream>              #include表示预处理,引入一个iostream的库。<>里面表示的是一个头文件,每一个都有其功能intmain()                      #main表......