数据结构零散知识点

本文介绍了如何通过数组型二叉树结构判断序列是否为最大堆或最小堆,并详细讲解了二叉排序树的特点,包括查找效率、遍历顺序和平均查找长度。此外,还涉及了运算溢出判断、红黑树性质、链表特点、数据结构性能比较和完全二叉树节点数量计算。
摘要由CSDN通过智能技术生成

怎么判断一个序列是不是堆?

把这个序列看成数组型的二叉树,如果根结点是i,左子树是2i,右子树是2i+1。

堆分为最大堆与最小堆:

最大堆中所有父节点都比左子树、右子树大,比如已知序列{100,60,70,50,32,65},画成堆就是: 所以已知序列是个最大堆。

最小堆中所有父节点都比左子树、右子树小,比如{32,50,60,70,100,65},
符合以上两种情况的序列就是堆。

堆是按照顺序进行排列的,也就是在二叉树中,要按顺序进行从上到下,从左往右的操作。

9853421是最大堆

9458312不是堆

9584321是最大堆

9854312是最大堆

下面关于二叉排序树的说法正确的是

在二叉排序树中,平衡二叉树的查找效率更高;

对二叉排序树进行中序遍历,必定得到()点关键()的有序序列;

二叉排序树的平均查找长度是O(log2n);

二叉排序树的查找效率与二叉树的树形有关。

有4个参数,用8位补码分别表示为r1=FEH,r2=F2H,r3=90H,r4=F8H,运算结构存入8位寄存器中,不会溢出的是:

A.r4*r2

B.r1*r4

C.r1*r2

D.r2*r3

下列属于红黑树性质的有

每个叶结点(叶结点即树尾端NIL指针或NULL结点)是黑的

根节点是黑的

每个结点要么是红的,要么是黑的

如果每一个结点是红的,那么它的两个儿子都是黑的

若进栈序列是1,2,3,4,5,6,且进栈和出栈可穿插进行,则不可能出现的出栈序列是

432156

235164

324165

243156

20.一棵二叉树的前序遍历为aebdc,后序遍历为bcdea,则根节点的子结点是

无法确定

有e、c

只有e

有e、b

21.链表不具备的特点是:

可随机访问任何一个元素;

插入,删除操作不需要移动元素;

无需事先估计存储空间大小;

所需数据结构可以不是连续的。

同时具有较高的查找和删除性能的数据结构有:

平衡二叉树(AVL树)的查找,插入和删除性能都是O(logN),其中查找和删除性能较好;

Hash表的查找、插入和删除性能都是O(1),都是最好的。

链表不具备的特点:

链表的特点:
1、高效的插入和删除
2、低效的随机访问

所需空间与线性表长度成正比?

不必实现估计存储空间?

LinkedList和ArrayList的比较
1:ArrayList的实现基于数组,LinkedList的实现基于双向链表
2:对于随机访问,ArrayList优于LinkedList,ArrayList可以根据下标对元素进行随机访问。而LinkedList的每一个元素都依靠地址指针和它后一个元素连接在一起,在这种情况下,查找某个元素只能从链表头开始查询直到找到为止。可随机访问任一元素?
3:对于插入和删除操作,LinkedList优于ArrayList,因为当元素被添加到LinkedList任意位置的时候,不需要像ArrayList那样重新计算大小或者是更新索引。但是删除和插入都不需要移动元素?
4:LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

时间复杂度:
找到目标位置之后,插入、删除的时间复杂度才为O(1)。
查找时间复杂度为O(n)
使用跳跃表时间复杂度为O(logn),插入、删除也为 O(logn)。

反转单链表

/** * Definition for singly-linked list.
* public class ListNode { *
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
*  }
*/
public class 反转链表 {
    public ListNode reverseList(ListNode head) {
        //1、前指针节点
        ListNode prev = null;
        //2、当前指针节点
        ListNode curr = head;
        //每次循环,都将当前节点指向它前面的节点,然后当前节点和前节点后移
        while (curr != null) {
            //临时节点,暂存当前节点的下一节点,用于后移
            ListNode nextTemp = curr.next;
            //将当前节点指向它前面的节点
            curr.next = prev;
            //前指针后移
            prev=curr;
            //当前指针后移
            curr = nextTemp;
        }
        return prev;
    }
}

关于完全二叉树:

题型:

一棵完全二叉树第5层有10个叶子结点(根为第一层),则结点个数可能有多少个?

有三种情况:

第五层是倒数第二层:1+2+4+8+16+12=43;

第五层是最后一层:2^4-1+10=25;

一棵完全二叉树第六层有23个叶子结点(根为第一层),则结点个数可能有多少个?

有三种情况:

第一种情况:第一层是最后一层:23个叶子节点可以推测第5层至少有12个节点,但是第五层其实是有16个节点,也就是23+16+8+4+2+1=54;

第二种情况:第6层是倒数第二层:按照正常应该是2^5是32个,那么在倒数第二层就有9个节点既有左子树又有右子树。2^6-1+18=81;

解析:

根据二叉树的性质,第i层上的结点数最多为2^i(i >= 0,所以第一层为i=0)个,所以第六层的结点数最多为2^5=32个,根据题意第六层有23个叶子结点,推测出还有第七层,所以第六层结点数减去23个叶子结点,剩下的9个结点都有左右子树,故第七层有9*2=18个结点,总的结点数=2^0+2^1+2^2+2^3+2^4+2^5+18=81个
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆〇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值