数据结构:选择题+编程题(每日一练)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 数据结构:选择题+编程题(每日一练)



选择题:

题一:

1.一颗拥有1000个结点的树度为4,则它的最小深度是( )

A.5

B.6

C.7

D.8

答案解析:

       如果这棵树每一层都是满的,则它的深度最小,假设它为一个四叉树,高度为h,则这个数的节点个数为(4^h - 1) / 3,当h = 5, 最大节点数为341, 当h = 6, 最大节点数为1365,所以最小深度应该为6。

题二:

2.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为( )个

A.11

B.12

C.13

D.14

答案解析:        

       设Ni表示度为i的节点个数,则节点总数 N = N0 + N1 + N2

       节点个数于节点边的关系: N个节点的树有N-1个边

       边与度的关系:N - 1 = N1 + 2 * N2

       故:N0 + N1 + N2 - 1 = N1 + 2 * N2

       因此,得:N0 = N2 + 1

       回到原题,N0 = 3,N1 = 8,可得N2 = 2。

       因此答案是 3 + 8 + 2 = 13。

题三:

3.在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有( )个

A.4

B.5

C.6

D.7

答案解析:        

       设度为i的节点个数为ni, 该树总共有n个节点,则n=n0+n1+n2+n3.

       有n个节点的树的总边数为n-1条.

       根据度的定义,总边数与度之间的关系为:n-1=0*n0+1*n1+2*n2+3*n3.

       联立两个方程求解,可以得到n0 = n2 + 2n3 + 1,  n0=6

题四:

4.下列关于二叉树的叙述错误的是( )

A.二叉树指的是深度为 2 的树

B.一个 n 个结点的二叉树将拥有 n-1 条边

C.一颗深度为 h 的满二叉树拥有 2^h-1 个结点(根结点深度为1)

D.二叉树有二叉链和三叉链两种表示方式

答案解析:    

       A错误: 二叉树指最大孩子个数为2,即树的度为二的树。深度描述的为树的层数。

       B正确: 对于任意的树都满足:边的条数比节点个数少1,因为每个节点都有双亲,但是根节点没有

       C正确: 正确,参加二叉树性质

       D正确: 二叉链一般指孩子表示法,三叉连指孩子双亲表示法,这两种方式是二叉树最常见的表示方式,虽然还有孩子兄弟表示法,该中表示方式本质也是二叉链

题五:

5.下列关于堆的叙述错误的是( )

A.堆是一种完全二叉树

B.堆通常使用顺序表存储

C.小堆指的是左右孩子结点都比根结点小的堆

D.堆的删除是将尾部结点放到队顶后执行向下调整算法

答案解析:

       堆是在完全二叉树的基础上进行了条件的限制,即:每个节点都比其孩子节点大,则为大堆;每个节点都比其孩子节点小则为小堆完全二叉树比较适合使用顺序结构存储。

堆删除:删的是堆顶元素,常见操作是将堆顶元素与堆中最后一个元素交换,然后对中元素个数减少一个,重新将堆顶元素往下调整故C错误

编程题:

题一:单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

思路一:

       对整棵二叉树进行遍历比较!!!

       第一步:优先判断树是否为空,空树为真;

       第二步:判断左树是否存在且左树值等于根值,然后再判断右树存在且右树值等于根值;

       第三步:最后,以当前为节点遍历左子树和右子树。

bool isUnivalTree(struct TreeNode* root)
{
    //判断子树是否为空
    if(root == NULL)
        return true;
    //左树存在且左树值等于根值
    if(root->left && root->left->val != root->val)
        return false;
    //右树存在且右树值等于根值
    if(root->right && root->right->val != root->val)
        return false;
    //递归判断子树值是否都相等
    return isUnivalTree(root->left) && isUnivalTree(root->right);
}

题二:二叉树的最大深度

104. 二叉树的最大深度 - 力扣(LeetCode)

思路一:

       第一步:判断树是否为空,为空返回0;

       第二步:定义一个leftdeep:记录除根层以外左子树层数;定义一个rightdeep:记录除根层以右左子树层数;

       第三步:当遍历到树的子节点 返回值最大的值+1(加上当前层).

int maxDepth(struct TreeNode* root)
{   
    if(root == NULL)
        return 0;
    //记录除根层以外左子树层数
    int leftdeep = maxDepth(root->left);
    //记录除根层以外右子树层数
    int rightdeep = maxDepth(root->right);
    
    return leftdeep > rightdeep ? leftdeep+1 : rightdeep+1;
}

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                             

目录
相关文章
|
1月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
29 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
2月前
|
存储 索引 Python
Python编程的常用数据结构—列表
Python编程的常用数据结构—列表
|
2月前
|
存储 索引 Python
Python编程的常用数据结构—列表 原创
Python编程的常用数据结构—列表 原创
|
2月前
|
Python
告别低效!Python并查集:数据结构界的超级英雄,拯救你的编程人生!
告别低效!Python并查集:数据结构界的超级英雄,拯救你的编程人生!
28 0
|
2月前
|
算法 开发者 计算机视觉
Python并查集:数据结构界的肌肉男,让你在编程路上无所畏惧!
在编程的浩瀚宇宙中,数据结构如同基石,构建了解决问题的坚实框架。而并查集(Union-Find),这位数据结构界的“肌肉男”,以其独特的魅力和强大的功能,让无数开发者在面对复杂关系处理时,都能感受到前所未有的从容与自信。今天,就让我们一同揭开并查集的神秘面纱,看看它是如何成为你编程路上的得力助手的。
30 0
|
2月前
|
算法 程序员 计算机视觉
Python并查集:数据结构界的肌肉男,让你在编程路上无所畏惧!
并查集,一种处理不相交集合合并与查询的数据结构,被誉为编程的“肌肉男”。它提供Find(找根节点)和Union(合并集合)操作,常用于好友关系判断、图像处理、集合合并等。Python实现中,路径压缩和按秩合并优化效率。并查集的高效性能使其成为解决问题的强大工具,助力程序员应对复杂挑战。
29 0
|
3月前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
111 7
|
4月前
|
Python
告别低效!Python并查集:数据结构界的超级英雄,拯救你的编程人生!
【7月更文挑战第18天】并查集,数据结构超级英雄,用于不相交集合的合并与查询。Python实现包括初始化、查找根节点和合并操作。应用广泛,如社交网络分析、图论问题、集合划分等。示例代码展示了解决岛屿数量问题,统计连通的“1”单元格数。掌握并查集,提升编程效率,解决复杂问题。
52 6
|
4月前
|
算法 程序员 计算机视觉
Python并查集:数据结构界的肌肉男,让你在编程路上无所畏惧!
【7月更文挑战第16天】并查集,一种处理不相交集合合并与查询的数据结构,被誉为编程的“肌肉男”。它提供Find(找根节点)和Union(合并集合)操作,常用于好友关系判断、图像处理、集合合并等。Python实现中,路径压缩和按秩合并优化效率。并查集的高效性能使其成为解决问题的强大工具,助力程序员应对复杂挑战。
46 0
|
4月前
|
安全 调度 Python
Python堆与优先队列:不只是数据结构,更是你编程路上的超级加速器!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue提供堆与优先队列功能。堆,作为完全二叉树,支持排序性质,heapq用于单线程操作;PriorityQueue在多线程中保证安全。通过示例展示了如何插入、删除任务,以及在多线程任务调度中的应用。堆与优先队列是高效编程的关键工具,提升代码性能与并发处理能力。
39 0