当前位置: 首页 > news >正文

太月星网站建设程序开发网页设计石家庄网站制作机构

太月星网站建设程序开发网页设计,石家庄网站制作机构,wordpress用户登录页面,福田附近网站开发公司1. BM24 二叉树的中序/后续遍历 要求#xff1a;给定一个二叉树的根节点root#xff0c;返回它的中序遍历结果。                          输入#xff1a;{1,2,#,#,3} 返回值#xff1a;[2,3,1]1.1 自己的整体思路#xff08;与二叉树的前序遍…1. BM24 二叉树的中序/后续遍历 要求给定一个二叉树的根节点root返回它的中序遍历结果。                          输入{1,2,#,#,3} 返回值[2,3,1]1.1 自己的整体思路与二叉树的前序遍历大致一样 使用二叉树的前序遍历方法递归完成二叉树元素的访问。先遍历二叉树求出二叉树的结点数量以后再申请数组这样节省内存大小。二叉树的前中后序遍历只需要改变访问根结点的代码位置其与递归左子树和右子树的位置代表是前中后序的一种。 #include malloc.h #include stdbool.h #include stdint.h #include stdio.h #include string.h int TreeSize(struct TreeNode* root) { //判断二叉树有多少个结点if (root NULL) {return 0;}return TreeSize(root-left) TreeSize(root-right) 1; } void visit_root(struct TreeNode* root, int* arr,int *a){ //访问根结点*(arr *a) root-val; //存下根结点元素(*a); //索引 }void Preorder(struct TreeNode* root, int* arr,int *a){ //遍历二叉树if (root!NULL) {Preorder(root-left,arr,a); //递归左结点visit_root(root,arr,a); //访问根结点 //如果把这一行放到下面一行就是后序遍历其他的代码不用变的Preorder(root-right,arr,a); //递归右结点}} int* inorderTraversal(struct TreeNode* root, int* returnSize ) { //中序遍历// int n; //这里没有初始化导致程序卡死了int n 0;int *i n;int count TreeSize(root); //计算二叉树有多少结点printf(val %d\r\n,count);int *array (int *)malloc(count * sizeof(int)); //申请一个空数组Preorder(root, array, i); //遍历二叉树*returnSize *i;return array; }1.2 小结 1.2.1 求二叉树结点的个数 int TreeSize(struct TreeNode* root) { //判断二叉树有多少个结点if (root NULL) {return 0;}return TreeSize(root-left) TreeSize(root-right) 1; } 假设这个二叉树如下所示                  第一次进到这个程序中结点1不为NULL返回的是TreeSize(结点2) TreeSize(结点3) 1  运行TreeSize(结点2) 结点2不为NULL返回的是TreeSize(结点4) TreeSize(结点5) 1  运行TreeSize(结点4) 结点4不为NULL返回的是TreeSize(NULL) TreeSize(NULL) 1,也就是返回的0 0 1 1  返回上面一层TreeSize(结点5)结点5不为NULL返回的是TreeSize(NULL) TreeSize(NULL) 1,也就是返回的0 0 1 1目前TreeSize(结点2) 返回的值就是111 3  运行TreeSize(结点3)结点3不为NULL返回的是TreeSize(NULL) TreeSize(结点6) 1   运行TreeSize(结点6)结点6不为NULL返回的是TreeSize(NULL) TreeSize(NULL) 1也就是返回的0 0 1 1目前TreeSize(结点3) 返回的值就是011 2  所以整体TreeSize(结点2) TreeSize(结点3) 1 3 2 1 6也就计算出来了二叉树结点的个数。 1.2.2 使用指针时未初始化变量初值 使用指针时未初始化变量初值导致程序报错。 int n; int *i n;2. BM28 二叉树的最大深度 要求求给定二叉树的最大深度深度是指树的根节点到任一叶子节点路径上节点的数量。最大深度是所有叶子节点的深度的最大值.   这个题没有什么思路看视频讲解的方法代码如下: #include stdio.h int maxDepth(struct TreeNode* root ){int n1 0;int n2 0;if (root NULL) {return 0;}n1 maxDepth(root-left);n2 maxDepth(root-right);return n1 n2 ? n1 1 : n2 1; }假设这个二叉树如下所示,还是以下面这个二叉树为例看这个代码具体运行的步骤             第一次进到这个程序中结点1根结点不为NULL运行 n1 maxDepth(根结点的左结点结点2);  因为结点2不为NULL此时传入结点2进入函数运行n1 maxDepth(结点2的左结点结点4);  因为结点4不为NULL此时传入结点4进入函数运行n1 maxDepth(结点4的左结点NULL)并返回了n1 0。  因为结点4的左结点为NULL程序会执行下面一句n2 maxDepth(结点4的右结点NULL)并返回了n2 0。  所以对于结点4n1 n20程序会返回1。这里也就是结点2的左结点n1 maxDepth(结点2的左结点结点4)这里的n1 1  此时程序会返回到结点2上面运行n2 maxDepth(结点2的右结点结点5);  因为结点5不为NULL此时传入结点5进入函数运行n1 maxDepth(结点5的左结点NULL)并返回了n1 0。  因为结点5的左结点为NULL程序会执行下面一句n2 maxDepth(结点5的右结点NULL)并返回了n2 0。  所以对于结点5n1 n20程序会返回1。这里也就是结点2的右结点n2 maxDepth(结点2的右结点结点5)这里的n2 1  此时对于结点2来说n11n21所以会返回2。这里也就是结点1的左结点n1 maxDepth(结点1的左结点结点2)这里的n1 2  此时程序会返回到结点1上面运行n2 maxDepth(结点1的右结点结点3);  因为结点3不为NULL此时传入结点3进入函数运行n1 maxDepth(结点3的左结点NULL)并返回了n1 0。  因为结点3的左结点为NULL程序会执行下面一句n2 maxDepth(结点3的右结点结点6)。  因为结点6不为NULL此时传入结点6进入函数运行n1 maxDepth(结点6的左结点NULL)并返回了n1 0。  因为结点6的左结点为NULL程序会执行下面一句n2 maxDepth(结点6的右结点NULL)并返回了n2 0。  所以对于结点6n1 n2 0程序会返回1。这里也就是结点3的右结点n2 maxDepth(结点3的右结点结点6)这里的 n2 1  此时对于结点3来说n1 0n2 1所以会返回2。也就是结点1中的n2 maxDepth(结点1的右结点结点3) 2;  此时对于结点1来说n1 2n2 2所以会返回3。程序结束二叉树的最大深度是3。   3. BM29 二叉树中和为某一值的路径 要求给定一个二叉树root和一个值 sum 判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2.叶子节点是指没有子节点的节点 3.路径只能从父节点到子节点不能从子节点到父节点 4.总节点数目为n                 这个题也没有什么思路看视频讲解的方法代码如下: bool bianli(struct TreeNode* root, int sum, int sum1){ //遍历一个子树必须要返回一个值if (root NULL) {return false;}sum1 root-val; //求和if (root-left NULL root-right NULL) {if (sum1 sum){return true;}else{return false;}}bool leftHasPath bianli(root-left, sum, sum1);bool rightHasPath bianli(root-right, sum, sum1);return leftHasPath || rightHasPath; }bool hasPathSum(struct TreeNode* root, int sum){//如何遍历一个子树// int * arr (int *)malloc(1000*sizeof(int)); int a 0; //求和return bianli(root,sum,a); }假设这个二叉树如下所示,还是以下面这个二叉树为例看这个代码具体运行的步骤结点每一排依次称为结点1,2,3…  第一次进到这个程序中结点1根结点不为NULLsum1 5; 然后进入这一句bool leftHasPath bianli(结点2, 22, 5);   sum1 5 4 9; bool leftHasPath bianli(结点4, 22, 9); 这是结点3的左结点。   sum1 9 1 10;return false; 返回上一层循环返回到结点3 bool rightHasPath bianli(结点5, 22, 9);因为到结点3的时候sum1的值就是9。   sum1 9 11 20; bool leftHasPath bianli(结点7, 22, 20);   sum1 20 2 22 return true综上就是leftHasPath false rightHasPath true程序会继续运行直到遍历完所有可能的路径。最终会返回true。   改进代码如下找到一条路径后就会停止不会遍历所有的路径的 bool findPath(struct TreeNode* node, int targetSum, int currentSum) {if (node NULL) {return false;}currentSum node-val;if (node-left NULL node-right NULL currentSum targetSum) {return true;}bool foundInLeft findPath(node-left, targetSum, currentSum);if (foundInLeft) {return true; // 找到路径立即中断递归}bool foundInRight findPath(node-right, targetSum, currentSum);if (foundInRight) {return true; // 找到路径立即中断递归}return false; // 未找到路径 }bool hasPathSum(struct TreeNode* root, int sum){//如何遍历一个子树// int * arr (int *)malloc(1000*sizeof(int)); int a 0; //求和return findPath(root,sum,a); }假设这个二叉树如下所示,还是以下面这个二叉树为例看这个代码具体运行的步骤                  第一次进到这个程序中结点1根结点不为NULLcurrentSum 5; 然后进入这一句bool foundInLeft findPath(结点2, 22, 5);  currentSum 5 4 9; bool foundInLeft findPath(结点4, 22, 9);  currentSum 9 1 10; bool foundInLeft findPath(NULL, 22, 10); return false并返回到了结点2了。   bool foundInRight findPath(结点5, 22, 9); currentSum 9 11 20; bool foundInLeft findPath(结点7, 22, 20);  currentSum 20 2 22; return true; 程序不会会继续运行不会遍历完所有可能的路径。当找到路径后递归会立即中断从而停止遍历。
http://www.sczhlp.com/news/183152/

相关文章:

  • 九江做网站网站推广用什么方法最好
  • 不用下载劰网站的片你懂的中国建筑网建设通证书查询
  • 济南网站建设专业上海金山网站设计公司
  • 类似优酷的网站开发wordpress 纯净版下载地址
  • wordpress创建网站网站开发合同 附件
  • 在线做数据图的网站有哪些问题网页设计与制作模板图片
  • 网站销售怎么做国防教育网站建设说明书
  • 聊城开发区建设局网站wordpress本地运行
  • 做百度推广网站找谁好网站建设首选唯美谷
  • 响应式网站微博视频教程展会布置效果图
  • 邹平做网站公司有哪个网站可以做链接
  • 如何查询网站是谁做的wordpress更新服务ping
  • 东莞企业公司网站建设91关键词排名
  • 《基层建设》在哪个网站收录的河北 保定 网站建设
  • 哈尔滨做网站电话中资咨询管理有限公司
  • 1建设网站的重要性在线logo生成器标智客
  • 湖北德升建站360社区app
  • 网站对企业的重要性商城网站建设排名
  • 2025秋_9
  • 10月10日
  • 详细介绍:【Windows10】MySQL9.4安装配置
  • ChatTime的一些理解
  • ChatTS的一些理解
  • 做网站时如何建立栅格关键词seo排名优化如何
  • 西安网站建设网建设垂直网站需要哪些流程
  • 表格布局网站网站建设定制开发推广
  • 做网站什么主题好做五金上哪个网站推广
  • 网站制作公司大型上海闵行区怎么样
  • 网站建设有什么要求短链
  • 江宁做网站价格宠物网页设计图片