2004.11.04

  1. 计算一颗给定二叉树的所有双分支节点个数
  2. 编写把一个树的所有左右子树进行交换的函数
  3. 求先序遍历中第k个结点的值 (1 <= k <= 二叉树中的结点个数)
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std; typedef struct Bitnode{
int data;
struct Bitnode *lc,*rc;
}Bitnode,*Bitree;
//------------------------------------------------------------------------- //王道数据结构 P158 T07
//计算一颗给定二叉树的所有双分支节点个数 int getnum(Bitree T)
{
if(T==NULL) return 0; //若b为空则贡献0
else if(T->lc && T->rc) return getnum(T->lc)+getnum(T->rc)+1;//有左右节点,贡献给上一层+1
else return getnum(T->rc)+getnum(T->lc); //只有一个节点则归到上一层 数量不变
} //---------------------------------------------------------------------------------- //王道数据结构 P158 T07
//编写把一个树的所有左右子树进行交换的函数 void swaptree(Bitree T)
{
if(T==NULL) return;
else if(T->lc && T->rc) {
swaptree(T->lc); //递归进左子树
swaptree(T->rc);//递归进右子树
swap(T->lc,T->rc);
}
}
//------------------------------------------------------------------------- //王道数据结构 P158 T09
//求先序遍历中第k个结点的值 (1 <= k <= 二叉树中的结点个数) //---------------------版本1(自写版)------------------
int idx=1;
void getknode (Bitree T,int k)
{
if(T==NULL ) return ;
if(idx==k) {
cout<<T->data;
return ;
}
idx++; getknode(T->lc,k);
getknode(T->rc,k); }
//---------------------王道答案版--------------------
int i=1;
ElemType prenode(Bitree T,int k)
{
if(T==NULL) return '#' ; //空结点 返回特殊字符
if(i==k) return T->data;
i++; char ch=prenode(T->lc,int k);//进左子树查找
if(ch!='#') return ch; //如果空结点返回的元素值没有意义 char ch=prenode(T->rc,int k);
if(ch!='#') return ch; }

2024.11.08

  1. 二叉树以二叉链表存储 求非空二叉树的宽度
#include<bits/stdc++.h>

#define endl '\n'
using namespace std;
#define Maxsize 150
typedef struct Bitnode {
int data;
struct Bitnode *lc,*rc;
} Bitnode,*Bitree; //王道数据结构 P159 T13 //-----------二叉树以二叉链表存储 求非空二叉树的宽度------------ typedef struct {
int front, rear;
int level[Maxsize];//存层次的序号
Bitree data[Maxsize];//存元素
} Queue; int getwidth(Bitree T, Queue Q) {
Bitree p;//工作指针
int k;//用来更新层次下标
Q.front = Q.rear = -1; Q.rear++;//元素入队
Q.data[Q.rear] = T; //根节点入队
Q.level[Q.rear] = 1; while (Q.front < Q.rear) {
//取出队头
Q.front++;
p = Q.data[Q.front];
k = Q.level[Q.front]; if (p->lc) { //左孩子入队
Q.rear++;
Q.data[Q.rear] = p->lc;
Q.level[Q.rear] = k + 1; //更改对应的层次
}//注意 不可以写成else if if (p->rc) { //右孩子入队
Q.rear++;
Q.data[Q.rear] = p->rc;
Q.level[Q.rear] = k + 1;;
}
} int Max=0;//统计最大宽度
int i=0;//移动指针
int tmp=0;//统计对应层次序号的数量
k=1; //遍历统计最大值
while(i<=Q.rear)
{
tmp=0;
while(i<=Q.rear && Q.level[i]==k)
{
tmp++;
i++;
}
k=Q.level[i];
if(tmp>Max) Max=tmp;
}
return Max; }
//--------------------------------------------------------------
  1. 将给定的表达式树 转换为等价的中缀表达式并输出

叶子结点肯定是操作数,非叶子结点就是运算符

#include<bits/stdc++.h>

#define endl '\n'
using namespace std; //王道数据结构 P159 T18
//将给定的表达式树 转换为等价的中缀表达式并输出 //注意表达式树的叶子结点 肯定是操作数
//根节点和叶子结点不加括号, 其余记得添加括号
typedef struct node{
char data[10];
struct node *left ,*right;
}BTree; void getin(BTree *T,int dep)
{
if(T==NULL) return ;
else if(!T->left && !T->right) //叶子结点 输出操作数
{
cout<<T->data;
}else {
if(dep>1) cout<<"(";//若有子表达式 则加一层括号
getin(T->left,dep+1);
cout<<T->data; //输出操作符
getin(T->right,dep+1);
if(dep>1) cout<<")";//若有子表达式加一层括号
}
} void BtreeToe(BTree *T)
{
getin(T,1);//从根节点进入
} signed main() { }

二叉树 (王道数据结构 C语言版)的更多相关文章

  1. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  2. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  3. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  4. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  5. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  6. 二叉树的基本操作(C语言版)

    今天走进数据结构之二叉树 二叉树的基本操作(C 语言版) 1 二叉树的定义 二叉树的图长这样: 二叉树是每个结点最多有两个子树的树结构,常被用于实现二叉查找树和二叉堆.二叉树是链式存储结构,用的是二叉 ...

  7. 深入浅出数据结构C语言版(12)——从二分查找到二叉树

    在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不 ...

  8. 【数据结构(C语言版)系列二】 栈

    栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...

  9. 深入浅出数据结构C语言版(5)——链表的操作

    上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...

  10. 深入浅出数据结构C语言版(1)——什么是数据结构及算法

    在很多数据结构相关的书籍,尤其是中文书籍中,常常把数据结构与算法"混合"起来讲,导致很多人初学时对于"数据结构"这个词的意思把握不准,从而降低了学习兴趣和学习信 ...

随机推荐

  1. shell脚本中的循环(for循环,while循环)及break、continue的用法示例

    Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的.常用到的循环有for循环和while循环.下面就分别介绍一下两种循环的结构. [for循环]: Shell脚本中的for循环示例: # ...

  2. 转载:大模型所需 GPU 内存笔记

    转载文章:大模型所需 GPU 内存笔记 引言 在运行大型模型时,不仅需要考虑计算能力,还需要关注所用内存和 GPU 的适配情况.这不仅影响 GPU 推理大型模型的能力,还决定了在训练集群中总可用的 G ...

  3. SecureCRT 屏幕输出行数设置

    第一步:打开设置 第二步:设置历史展示行数 第三步:保存后重启软件即可

  4. 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!

    DeepSeek V3/R1 火爆全网,基于原始模型的解决方案和 API 服务已随处可见,陷入低价和免费内卷. 如何站在巨人肩膀上,通过后训练(post-training)结合专业领域数据,低成本打造 ...

  5. AI如何改变数据驱动决策的方式

    导语 在这个信息爆炸的时代,数据成为了企业和组织最为宝贵的资源.然而,单纯的数据堆积并没有太大价值,只有通过分析和挖掘,才能真正发挥数据的潜力.随着AI技术的飞速发展,我们正见证着数据驱动决策方式发生 ...

  6. 2. MySQL的数据目录(详解讲解)

    2. MySQL的数据目录(详解讲解) @ 目录 2. MySQL的数据目录(详解讲解) 1. MySQL8 的主要目录结构 1.1 相关命令目录 1.2 配置文件目录 2. 数据库和文件系统的关系 ...

  7. SG定理

    先放一个 SG 函数的定义和 SG 定理 SG 函数: \(SG(p) = \text{mex}\ {SG(t)}\) SG 定理: \(\forall n\) 个独立的子图若 \(SG(1)\ \o ...

  8. 探究高空视频全景AR技术的实现原理

    1. 引言 笔者认为现阶段AR技术的应用是还是比较坑爹的,大都是噱头多但是实用的成分少,拿出来做做DEMO是可以,但是难以在实际的项目中落地产生实际的经济价值.一方面是很难在业务上难以找到合适的应用场 ...

  9. STM32实战——ESP8266 WIFI模块

    ESP8266 硬件介绍 ESP8266系列模组有哪些: 在本实验中,ESP8266与ESP-01不做区分. ESP-01引脚介绍: 引脚 功能 3.3 3.3V供电,避免使用5V供电 RX UART ...

  10. 【由技及道】CI/CD的量子纠缠术:Jenkins与Gitea的自动化交响曲【人工智障AI2077的开发日志】

    摘要:当代码提交触发量子涟漪,当构建流水线穿越时空维度--欢迎来到自动化构建的十一维世界.本文记录一个未来AI如何用Jenkins和Gitea搭建量子纠缠式CI/CD管道,让每次代码提交都成为时空交响 ...