【王道数据结构】【chapter5树与二叉树】【P159t17~19】【统考真题】

目录

2014年统考

2017年统考

2022年统考


2014年统考

#include <iostream>
#include <stack>
#include <queue>
typedef struct treenode{int weight;struct treenode *left;struct treenode *right;
}treenode,*ptreenode;ptreenode buytreenode(int x)
{ptreenode n=(ptreenode) malloc(sizeof (treenode));n->weight=x;n->left= nullptr,n->right= nullptr;return n;
}
ptreenode build_tree1()
{ptreenode root= buytreenode(1);root->left= buytreenode(2);root->right= buytreenode(3);root->left->left= buytreenode(4);root->left->right= buytreenode(5);root->right->left= buytreenode(6);root->right->right= buytreenode(7);root->left->left->left= buytreenode(8);root->left->left->right= buytreenode(9);return root;
}void print_tree(ptreenode root) {std::queue<ptreenode> tmp;tmp.push(root);int s = tmp.size();while (!tmp.empty()) {ptreenode t = tmp.front();tmp.pop();s--;printf("%3d", t->weight);if (t->left) tmp.push(t->left);if (t->right) tmp.push(t->right);if (s == 0) puts(""), s = tmp.size();}
}int _wpl(ptreenode root,int depth)
{if(root== nullptr) return 0;if(!root->left&&!root->right) return root->weight *depth;return _wpl(root->left,depth+1)+ _wpl(root->right,depth+1);
}
int _wpl2(ptreenode root)
{if(root== nullptr) return 0;if(!root->left&&!root->right) return 0;int w_l,w_r;w_l= _wpl2(root->left);w_r= _wpl2(root->right);root->weight=root->left->weight+root->right->weight;return w_l+w_r+root->weight;}
int wpl(ptreenode root)
{return _wpl(root,0);
}
int wpl2(ptreenode root)
{return _wpl2(root);
}
int main() {ptreenode root1=build_tree1();print_tree(root1);printf("the answer should be:%3d\n",8*3+9*3+5*2+6*2+7*2);//方法1printf("%3d\n",wpl(root1));//方法2printf("%3d\n",wpl2(root1));return 0;
}

2017年统考

#include <iostream>
#include <stack>
#include <queue>
#include <string>typedef struct treenode {std::string data;struct treenode *left;struct treenode *right;
} treenode, *ptreenode;ptreenode buytreenode(std::string x) {ptreenode n = new treenode; // 使用 new 来动态分配内存n->data = x;n->left = nullptr;n->right = nullptr;return n;
}ptreenode build_tree1()
{ptreenode root= buytreenode("*");root->left= buytreenode("+");root->right= buytreenode("*");root->left->left= buytreenode("a");root->left->right= buytreenode("b");root->right->left= buytreenode("c");root->right->right= buytreenode("-");root->right->right->right= buytreenode("d");return root;
}ptreenode build_tree2()
{ptreenode root= buytreenode("+");root->left= buytreenode("*");root->right= buytreenode("-");root->left->left= buytreenode("a");root->left->right= buytreenode("b");root->right->right= buytreenode("-");root->right->right->left= buytreenode("c");root->right->right->right= buytreenode("d");return root;
}void print_tree(ptreenode root) {std::queue<ptreenode> tmp;tmp.push(root);int s = tmp.size();while (!tmp.empty()) {ptreenode t = tmp.front();tmp.pop();s--;printf("%3s", t->data.c_str());if (t->left) tmp.push(t->left);if (t->right) tmp.push(t->right);if (s == 0) puts(""), s = tmp.size();}
}std::string trans(ptreenode root,int depth)
{if(root== nullptr) return "";if(!root->left&&!root->right) return root->data;if(depth==0){return trans(root->left,depth+1)+root->data+ trans(root->right,depth+1);}return "("+ trans(root->left,depth+1)+root->data+ trans(root->right,depth+1)+")";}
int main() {ptreenode root1=build_tree1();print_tree(root1);printf("%s\n",trans(root1,0).c_str());ptreenode root2=build_tree2();print_tree(root2);printf("%s\n",trans(root2,0).c_str());return 0;
}

2022年统考

#include <iostream>
#define MAX_SIZE 20
typedef struct{int SqBiTNode[MAX_SIZE];int ElemNum;//实际占用的数组元素个数
}SqBiTree;bool search_tree(SqBiTree tree,int pos)
{if (pos>tree.ElemNum||tree.SqBiTNode[pos]==-1) return true;if(pos*2+1<tree.ElemNum&&(pos*2+2)<tree.ElemNum&&tree.SqBiTNode[pos*2+1]!=-1&&tree.SqBiTNode[pos*2+2]!=-1){bool tmp=(tree.SqBiTNode[pos]>=tree.SqBiTNode[pos*2+1])&&(tree.SqBiTNode[pos]<=tree.SqBiTNode[pos*2+2]);return search_tree(tree,pos*2+1)&& search_tree(tree,pos*2+2)&&tmp;}if(pos*2+1<tree.ElemNum&&tree.SqBiTNode[pos*2+1]!=-1) return tree.SqBiTNode[pos]>=tree.SqBiTNode[pos*2+1]&& search_tree(tree,pos*2+1);if(pos*2+2<tree.ElemNum&&tree.SqBiTNode[pos*2+2]!=-1) return tree.SqBiTNode[pos]<=tree.SqBiTNode[pos*2+2]&& search_tree(tree,pos*2+2);}bool search_tree2(SqBiTree tree,int pos,int &pre)
{if (pos<tree.ElemNum&&tree.SqBiTNode[pos]!=-1) {if (!search_tree2(tree, 2 * pos + 1, pre)) return false;if (tree.SqBiTNode[pos] <= pre) return false;pre = tree.SqBiTNode[pos];if (!search_tree2(tree, 2 * pos + 2, pre)) return false;}return true;
}
int main() {SqBiTree t1;int values[] = {40, 25, 60, -1, 30, -1, 80, -1, -1, 27};std::copy(values, values + sizeof(values) / sizeof(values[0]), t1.SqBiTNode);t1.ElemNum=10;// 打印数组for (int i = 0; i < t1.ElemNum; ++i) {std::cout << t1.SqBiTNode[i] << " ";}std::cout << std::endl;SqBiTree t2;int values2[] = {40,50,60,-1,30,-1,-1,-1,-1,-1,35};std::copy(values2, values + sizeof(values2) / sizeof(values2[0]), t2.SqBiTNode);t2.ElemNum=11;// 打印数组for (int i = 0; i < t2.ElemNum; ++i) {std::cout << t2.SqBiTNode[i] << " ";}std::cout << std::endl;if(search_tree(t1,0)) printf("tree1 is a search tree\n");else printf("tree1 is not a search tree\n");if(search_tree(t2,0)) printf("tree2 is a search tree\n");else printf("tree2 is not a search tree\n");int pre=-1;if(search_tree2(t1,0,pre)) printf("tree1 is a search tree\n");else printf("tree1 is not a search tree\n");pre=-1;if(search_tree2(t2,0,pre)) printf("tree2 is a search tree\n");else printf("tree2 is not a search tree\n");return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471277.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python----输入输出算数运算

1.格式化输出 如果我们直接打印输出&#xff0c;就是输出变量的值&#xff0c;例如&#xff1a; 如果我们想打印a10就需要格式化字符串&#xff0c;就是使用f进行格式化&#xff0c;如图所示&#xff1b; 2.控制台输入 input执行的时候&#xff0c;就会等待用户进行输入&…

free pascal:fpwebview 组件通过 JSBridge 调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr &#xff0c;编写 js_bind_speak.lpr 如下&#xff0c;通过 JSBridge 调用本…

相机图像质量研究(24)常见问题总结:CMOS期间对成像的影响--摩尔纹

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之XCP模块配置详解(上)

XCP模块配置详解 - 上 一、XCP模块配置项处理1.1 Tx Pdu配置项二、XCP模块其他配置项2.1 参数XcpMainFunctionPeriod2.2 参数XcpOnCanEnabled2.3 容器XcpOnCan总结从本节开始先专注与配置项错误处理以及构建Autosar Rh850的最小系统搭建。 XCP模块在汽车电子各控制器中处于十分…

摸索设计模式的魅力:从策略模式看软件设计的智慧-灵活应对变化的艺术

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、案例场景1.1 一坨坨代码实现1.2 存在的问题 二、使用策略模式解决问题2.1 使用策略模式重构代码2.2 克服了问题 三、模式讲解3.1 结构图及说明3.2 实现步骤和注意事项3.3 适用场景 四、优势和局限性4.1 优势4.2 局…

软件实例分享,门诊处方软件存储模板处方笺教程,个体诊所电子处方开单系统软件教程

软件实例分享&#xff0c;门诊处方软件存储模板处方笺教程&#xff0c;个体诊所电子处方开单系统软件教程、 一、前言 以下软件教程以 佳易王诊所电子处方管理软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 电子处方软件支持病历汇总…

Linux第54步_根文件系统第1步_编译busybox并安装_然后添加“根文件系统”的库

学习编译busybox&#xff0c;并安装&#xff0c;然后添加“根文件系统”的库。有人说busybox构建根文件系统&#xff0c;只适合学习&#xff0c;不适合做项目。 1、了解ubuntu的根文件系统 根文件系统的目录名为“/”&#xff0c;就是一个斜杠。 1)、输入“cd /回车”&…

中国比特币矿工的新根据地:埃塞俄比亚

原文标题&#xff1a;《Chinese Bitcoin Miners Find a New Crypto Haven in Ethiopia》 撰文&#xff1a;David Pan、Fasika Tadesse&#xff0c;彭博社 编译&#xff1a;Carl&#xff0c;Techub News 中国比特币矿工的新根据地&#xff1a;埃塞俄比亚 去年春天&#xff0c…

18 19 SPI接口的74HC595驱动数码管实验

1. 串行移位寄存器原理&#xff08;以四个移位寄存器为例&#xff09; 1. 通过移位寄存器实现串转并&#xff1a;一个数据输入端口可得到四位并行数据。 通过给data输送0101数据&#xff0c;那么在经过四个时钟周期后&#xff0c;与data相连的四个寄存器的输出端口得到了0101…

变分自编码器(VAE)PyTorch Lightning 实现

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

跨部门协作,是持续绩效管理最有效的手段

跨部门协作是企业管理痛点 一项调查结果显示&#xff0c;企业中普通员工与中层管理者之间&#xff0c;花费在内部沟通上的时间&#xff0c;大约占其工作时间的40%-50%&#xff0c;对于更高层的主管来说这一比例则会更高。 有些工作在部门内沟通完全没问题&#xff0c;但是跨部…

基于Python实现Midjourney集成到(个人/公司)平台中

目前Midjourney没有对外开放Api&#xff0c;想体验他们的服务只能在discord中进入他们的频道进行体验或者把他们的机器人拉入自己创建的服务器中&#xff1b;而且现在免费的也用不了了&#xff0c;想使用就得订阅。本教程使用midjourney-api这个开源项目&#xff0c;搭建Midjou…