数据结构试题 20-21

真需要就死记吧





二叉树遍历-先序(非递归)【图解+代码】_哔哩哔哩_bilibili

解释一下步骤:

一个循环为:

1.取节点

2.放右子树

3.放左子树

每次循环,都要从栈里取出一个节点

先放右子树,再放左子树

那这道题就是,先放1(根节点)

然后开始循环

没东西可出

放3,放2

第一次循环结束

拿出2

放4

第二次循环结束

拿出4

放7

第三次循环结束

拿出7

没东西可放

第四次循环结束

拿出3

放6,放5

第五次循环结束

拿出5

没东西可放

第六次循环结束

拿出6




1、假设线性表L采用单链表存储结构,设计一个算法,在L的数据元素最大值之前插入(假设L的各个数据元素值不同)数据元素x。

基本思想,先查找到最大元素对应的结点,再在之前插入x对应的结点;

设计算法时要考虑用到两组指针变量,一组(maxp,maxpre)记录最大元素的结点及其前驱,另一组结点用来遍历各个数据元素对应的结点及其前驱,(pre,p)

cs 复制代码
void insertmaxnode(LinkNode *&L, Elemtype x)
{   LinkNode *p=L->next,*pre=L,*maxp=p,*maxpre=pre;
LinkNode *p=L->next,*pre=L; 
LinkNode *maxp=p,*maxpre=L,*s; 
while (p!=NULL) 
{ 
if (maxp->data<p->data) 
{ 
maxp=p; 
maxpre=pre; 
} 
pre=p; p=p->next; 
} 
s=(LinkNode *)malloc(sizeof(LinkNode)); 
s->data=x; 
s->next=maxpre->next; 
maxpre->next=s; 
}

LinkNode *p=L->next:p指向链表的第一个数据节点。

LinkNode *pre=L:pre指向头节点,用于记录p的前驱。

LinkNode *maxp=p:maxp初始化为第一个数据节点,用于记录当前最大值所在的节点。

LinkNode *maxpre=pre:maxpre初始化为头节点,用于记录最大值节点的前驱。


cs 复制代码
s=(LinkNode *)malloc(sizeof(LinkNode));

这行代码的作用是为新的链表节点分配内存,并将分配到的内存地址赋给指针s。这样一来,s就可以作为新节点的地址,通过它我们可以访问和操作这个新节点。


  1. 插入新节点:

    • 在循环结束后,找到了链表中的最大值节点及其前驱。接下来,创建一个新的节点s,用于存储新插入的数据元素x:s=(LinkNode *)malloc(sizeof(LinkNode)); s->data=x;
    • 调整指针,将新节点s插入到最大值节点前:s->next=maxpre->next; maxpre->next=s;。这样,s就成为了原最大值节点的新前驱,而原最大值节点的前驱变为了s。



该怎么只利用二叉排序树的定义以及后续遍历序列来找出中序和前序遍历。




2、假设二叉树采用二叉链存储结构,设计一个算法,求二叉树中第k层结点个数。

void Lnodenum(BTNode *b,int h,int k,int &n)

{ if (b==NULL) //空树直接返回

return;

else //处理非空树

{ if (h==k) n++; //当前访问的结点在第k层时,n增1

else if (h<k) //若当前结点层次小于k,递归处理左、右子树

{ Lnodenum(b->lchild,h+1,k,n);

Lnodenum(b->rchild,h+1,k,n);

}

}

}

为什么当前访问的结点在第k层时,n增1?

在这个算法中,参数b表示当前正在访问的二叉树节点,h表示该节点当前所在的层次(高度),k是要查找的层数,n是一个引用参数,用于记录在第k层的节点总数。函数的目标是计算并返回二叉树中第k层节点的个数。

当执行到条件if (h==k)时,这意味着当前访问的节点正好位于我们感兴趣的第k层。因此,如果要准确统计第k层的节点数量,每当遇到一个这样的节点,就需要将计数器n的值增加1。这是因为在二叉树的递归遍历过程中,每遇到一个节点,我们都能确切知道它处于哪一层,所以当层数匹配我们寻找的目标层数时,就应当累加计数。这样,通过遍历整棵树并应用这个逻辑,最终n中存储的就是第k层节点的总数。

若当前结点层次小于k,递归处理左、右子树,因为说明这个结点层次不是我要求的那层

相关推荐
爱干饭的boy18 小时前
手写Spring底层机制的实现【初始化IOC容器+依赖注入+BeanPostProcesson机制+AOP】
java·数据结构·后端·算法·spring
0_0梅伊阁诗人18 小时前
Django ORM 模型
开发语言·数据库·笔记·python·oracle·django
躲在云朵里`19 小时前
Redis深度解析:核心数据结构、线程模型与高频面试题
数据结构·数据库·redis
m0_5782678619 小时前
从零开始的python学习(九)P142+P143+P144+P145+P146
笔记·python·学习
wangwangblog21 小时前
LLVM 数据结构简介
开发语言·数据结构·c++
easy202021 小时前
Kaggle项目实践——Titanic: Machine Learning from Disaster
笔记·学习·机器学习
The_Second_Coming1 天前
容器应用学习笔记:containerd 篇
运维·笔记·学习·容器·containerd
HainesFreeman1 天前
书籍成长书籍文字#创业付费杂志《财新周刊》2025最新合集 更33期
笔记
平平无奇。。。1 天前
解密完全二叉树顺序存储之堆结构
c语言·数据结构·visual studio