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

做网站找俊义 合优网站做多个产品

做网站找俊义 合优,网站做多个产品,如何制作公司网址,昆明做网站开发维护的公司目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数#xff08;先序遍历#xff09;#xff1a;Swap 函数#xff08;中序遍历#xff09; 不可行#xff1a;Swap 函数#xff08;后序遍历#xff09;#xff… 目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数先序遍历Swap 函数中序遍历××× 不可行Swap 函数后序遍历 二、非递归算法求森林中有几棵树树的二叉链表(孩子-兄弟)存储表示法 三、判断二叉树是否为完全二叉树四、求二叉树的最小深度 以及 二叉树树高 树与二叉树知识点文章: 【数据结构】树与二叉树递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子树与森林知识点文章: 【数据结构】树与森林树的存储结构、森林与二叉树的转化、树与森林的遍历树与二叉树、树与森林部分习题: 【数据结构】树与二叉树、树与森林部分习题与算法设计例题 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 一、交换二叉树每个结点的左右孩子 以上代码实现了交换二叉树每个节点的左右孩子的功能分别使用了先序、中序和后序遍历的方式。 遍历二叉树算法的变式 Swap 函数先序遍历 从根节点开始先交换当前节点的左右孩子。然后递归地对左子树和右子树执行相同的操作。 Swap2 函数中序遍历 与先序遍历不同中序遍历中需要先对左子树进行操作然后交换当前节点的左右孩子最后对右子树进行操作。但是这个实现方式是错误的因为在交换左子树之后对右子树进行操作时右子树的结构已经发生了变化导致结果错误。 Swap3 函数后序遍历 与先序遍历类似但是是在遍历完左右子树之后再交换当前节点的左右孩子。这样可以保证在交换左右孩子时左右子树的结构不会被改变。 通过上述分析正确的交换方式是采用先序或后序遍历中序遍历方式不适合这个场景。 Swap 函数先序遍历 //前序 void Swap(BiTree T){//先序遍历 if(T){//根节点 if(T-lchild||T-rchild){BiTree p;p T-lchild;T-lchild T-rchild;T-rchild p;}Swap(T-lchild);Swap(T-rchild);} }Swap 函数中序遍历××× 不可行 //中序的不行 void Swap2(BiTree T){//中序遍历 if(T){//根节点 Swap2(T-lchild);if(T-lchild||T-rchild){BiTree p;p T-lchild;T-lchild T-rchild;T-rchild p;}Swap2(T-rchild);} }Swap 函数后序遍历 //后序 void Swap3(BiTree T){//后序遍历 if(T){//根节点 Swap3(T-lchild);Swap3(T-rchild);if(T-lchild||T-rchild){BiTree p;p T-lchild;T-lchild T-rchild;T-rchild p;}}}综上可行的只有先序和后序这两种方法 //交换二叉树每个结点的左右孩子 //先序 void XXSwap_LandRchild(BiTree T){BiTree p;if(TNULL) return;else{//先序if(!T-lchild!T-rchild) return;pT-lchild;T-lchildT-rchild;T-rchildp;XXSwap_LandRchild(T-lchild);XXSwap_LandRchild(T-rchild);} } //后序 void HXSwap_LandRchild(BiTree T){BiTree p;if(TNULL) return;else{//后序if(!T-lchild!T-rchild) return;HXSwap_LandRchild(T-lchild);HXSwap_LandRchild(T-rchild);pT-lchild;T-lchildT-rchild;T-rchildp;} }完整代码示例 //设二叉树采用二叉链表存储设计递归算法实现二叉树中所有结点的左右孩子交换。 #includeiostream using namespace std;//二叉链表 typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild; } BiTNode, *BiTree;//二叉树的建立的算法(按先序遍历序列建立) void CreateBiTree(BiTree T) {char ch; scanf(%c,ch);if (ch#) T NULL;else {T (BiTNode*)malloc(sizeof(BiTNode));T-data ch; // 生成根结点CreateBiTree(T-lchild); // 构造左子树CreateBiTree(T-rchild); // 构造右子树} }void XXSwap_LandRchild(BiTree T){BiTree p;if(TNULL) return;else{//先序if(!T-lchild!T-rchild) return;pT-lchild;T-lchildT-rchild;T-rchildp;XXSwap_LandRchild(T-lchild);XXSwap_LandRchild(T-rchild);} }void HXSwap_LandRchild(BiTree T){BiTree p;if(TNULL) return;else{//后序if(!T-lchild!T-rchild) return;HXSwap_LandRchild(T-lchild);HXSwap_LandRchild(T-rchild);pT-lchild;T-lchildT-rchild;T-rchildp;} }void XXPrintTree(BiTree T){if(TNULL) return;else{coutT-data ;XXPrintTree(T-lchild);XXPrintTree(T-rchild);} }int main() {BiTree T;CreateBiTree(T);XXPrintTree(T);coutendl;XXSwap_LandRchild(T);XXPrintTree(T);coutendl;HXSwap_LandRchild(T);XXPrintTree(T);coutendl;return 0; }二、非递归算法求森林中有几棵树 树的二叉链表(孩子-兄弟)存储表示法 [fc,data,nb] typedef struct CSNode{int data;struct CSNode *fc, *nb; }CSNode, *CSTree;树中每个结点三部分 数据域data长子指针域(fc) 右邻兄弟指针域(nb) 树和二叉树的转换 • 树以孩子兄弟表示法存相当于将树转换成二叉树但此二叉树根结点无右子树 • 好处借助二叉树的操作实现树的操作 森林与二叉树的转换 ⮚ 树采用二叉链表(孩子-兄弟)存储表示法转换成二叉树 ⮚ 森林由多棵树组成 F ( T 1 , T 2 , … , T n ) F ( T1, T2, …, Tn ) F(T1,T2,…,Tn); 将其每棵树转换成二叉树 B T 1 , B T 2 , … , B T n BT₁, BT₂, …, BTn BT1​,BT2​,…,BTn; ⮚ 每棵二叉树BT的根的右子树皆为空树从BTn开始依次将其根结点链为前一棵二叉树的根的右孩子 ⮚ 将森林转换成一棵二叉树森林的操作可借助二叉树的操作完成 森林和二叉树的转换 • 森林以孩子兄弟表示法存相当于将森林转换成二叉树 • 好处借助二叉树的操作实现森林的操作 因此只需要一直向右下数结点的个数就行 typedef struct CSNode{int data;struct CSNode *fc, *nb; }CSNode, *CSTree;//非递归算法求森林中有几棵树。 int CountForestTrees(CSTree F){CSTree pF;int num1;while(p){pp-nb;//右子树num;}return num; } 完整代码示例 //设森林采用根节点为T的二叉链表存储设计非递归算法求森林中有几棵树。 #includeiostream using namespace std;typedef struct CSNode{int data;struct CSNode *fc, *nb; }CSNode, *CSTree;//二叉树的建立的算法(按先序遍历序列建立) void CreateBiTree(CSTree T) {char ch; scanf(%c,ch);if (ch#) T NULL;else {T (CSNode*)malloc(sizeof(CSNode));T-data ch; // 生成根结点CreateBiTree(T-fc); // 构造左子树CreateBiTree(T-nb); // 构造右子树} }//非递归算法求森林中有几棵树。 int CountForestTrees(CSTree F){CSTree pF;int num1;while(p){pp-nb;//右子树num;}return num; }int main() {CSTree T;CreateBiTree(T);cout森林一共有CountForestTrees(T)棵树endl;return 0; }三、判断二叉树是否为完全二叉树 判断二叉树是否为完全二叉树的函数 //完全二叉树的性质 bool check(BiTree T){if((T-lchild T-rchild)||(!T-lchild !T-rchild))return true;return false; } //判断是否的完全二叉树 bool is_Complete_Binarytree(BiTree T){BiTree pT;SqQueue Q;if(!T) return true;//空树也是完全二叉树InitQueue(Q);EnQueue(Q,p);while(!is_QueueEmpty(Q)){DeQueue(Q,p);if(!check(p)) return false;else{if(p-lchild) EnQueue(Q,p-lchild);if(p-rchild) EnQueue(Q,p-rchild);}}return true; }(带main函数)题解代码示例 //给定一个二叉树找出其最小深度。 //最小深度是从根节点到最近叶子节点的最短路径上的节点数量。#includeiostream using namespace std;//判断二叉树是否为完全二叉树//结点定义入下 //二叉链表 typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild; } BiTNode, *BiTree;//若用到队列请用循环队列并请实现队列的相关操作以供调用。#define MAXQSIZE 100typedef struct {BiTree *base;int front,rear; } SqQueue; //定义循环队列//二叉树的建立的算法(按先序遍历序列建立) void CreateBiTree(BiTree T) {char ch; scanf(%c,ch);if (ch#) T NULL;else {T (BiTNode*)malloc(sizeof(BiTNode));T-data ch; // 生成根结点CreateBiTree(T-lchild); // 构造左子树CreateBiTree(T-rchild); // 构造右子树} } //队列的初始化 void InitQueue(SqQueue Q){Q.base (BiTree *)malloc(MAXQSIZE*sizeof(BiTree));Q.front Q.rear 0;//队列初始化 }//队空 bool is_QueueEmpty(SqQueue Q){if(Q.rearQ.front) return true;return false; }//队满 bool is_QueueMAX(SqQueue Q){if((Q.rear1)%MAXQSIZE Q.front) return true;return false; }//入队 void EnQueue(SqQueue Q,BiTree e){if(!is_QueueMAX(Q)){Q.base[Q.rear]e;Q.rear (Q.rear 1) % MAXQSIZE;}else{coutERROR!!! 队列已满endl;} } //出队 void DeQueue(SqQueue Q,BiTree e){if(!is_QueueEmpty(Q)){e Q.base[Q.front];Q.front (Q.front 1) % MAXQSIZE;}else{coutERROR!!! 队列为空endl;} }//完全二叉树的性质 bool check(BiTree T){if((T-lchild T-rchild)||(!T-lchild !T-rchild))return true;return false; } //判断是否的完全二叉树 bool is_Complete_Binarytree(BiTree T){BiTree pT;SqQueue Q;if(!T) return true;//空树也是完全二叉树InitQueue(Q);EnQueue(Q,p);while(!is_QueueEmpty(Q)){DeQueue(Q,p);if(!check(p)) return false;else{if(p-lchild) EnQueue(Q,p-lchild);if(p-rchild) EnQueue(Q,p-rchild);}}return true; }//层次遍历算法 void LevelOrderTraverse(BiTree T) { BiTree p T;SqQueue Q;if(!T) return; InitQueue(Q); EnQueue(Q,p);while (!is_QueueEmpty(Q)){ DeQueue(Q,p);printf(%c , p-data);if(p-lchild) EnQueue(Q,p-lchild);if(p-rchild) EnQueue(Q,p-rchild);} }int main(){BiTree T;//例如输入ABC##DE##F### 来创建二叉树 CreateBiTree(T);LevelOrderTraverse(T);coutendl;if(is_Complete_Binarytree(T)){cout是完全二叉树endl;}else{cout不是完全二叉树endl;}return 0; } 四、求二叉树的最小深度 以及 二叉树树高 给定一个二叉树找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 求二叉树的最小深度的函数 //直接就是将求树高的程序进行修改将找左右子树最大树高 改为求左右子树 最小树高 //求二叉树的最小深度 int Get_minHeigt(BiTree T){//二叉树的最小深度if(TNULL) return 0;else{int Left_Height Get_minHeigt(T-lchild);int Right_Height Get_minHeigt(T-rchild);int Tree_minHeight 1(Left_Height Right_Height?Left_Height:Right_Height);//取最短路径return Tree_minHeight;}}(带main函数)题解代码示例 //给定一个二叉树找出其最小深度。 //最小深度是从根节点到最近叶子节点的最短路径上的节点数量。#includeiostream using namespace std;typedef struct TreeNode{int data;//数据域TreeNode *rchild;//右孩子指针TreeNode *lchild;//左孩子指针 }TreeNode, *BiTree;//二叉树的建立的算法(按先序遍历序列建立) void CreateBiTree(BiTree T) {char ch; scanf(%c,ch);if (ch#) T NULL;else {T (TreeNode*)malloc(sizeof(TreeNode));T-data ch; // 生成根结点CreateBiTree(T-lchild); // 构造左子树CreateBiTree(T-rchild); // 构造右子树} }//求树高 int Get_Height(BiTree node){//递归 求树高 if(nodeNULL) return 0;else{int Left_Height Get_Height(node-lchild);int Right_Height Get_Height(node-rchild);int Tree_Height 1 (Left_Height Right_Height?Left_Height:Right_Height);//计算树高return Tree_Height;}} //求二叉树的最小深度 int Get_minHeigt(BiTree T){//二叉树的最小深度if(TNULL) return 0;else{int Left_Height Get_minHeigt(T-lchild);int Right_Height Get_minHeigt(T-rchild);int Tree_minHeight 1(Left_Height Right_Height?Left_Height:Right_Height);//取最短路径return Tree_minHeight;}}int main(){BiTree T;//例如输入ABC##DE##F### 来创建二叉树 CreateBiTree(T);cout树高为 ;coutGet_Height(T)endl;cout根节点到叶节点的最短路径上的节点数量为;coutGet_minHeigt(T)endl;return 0; } 感谢阅读 树与二叉树知识点文章: 【数据结构】树与二叉树递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子树与森林知识点文章: 【数据结构】树与森林树的存储结构、森林与二叉树的转化、树与森林的遍历树与二叉树、树与森林部分习题: 【数据结构】树与二叉树、树与森林部分习题与算法设计例题
http://www.pierceye.com/news/486605/

相关文章:

  • wordpress主题外贸网站wordpress检查php版本号
  • 便宜电商网站建设找平面图的网站
  • 大型网站建设制作平台东莞南城房价
  • 360免费视频网站建设mvc网站开发之美
  • 武宁县建设工程招标公告门户网站设计一个网站先做哪些构造
  • 公司网站免费建设2023设计院裁员惨烈程度
  • 别人做的网站不能用设计网站教程
  • 设计师发布作品的网站wordpress仿
  • 品牌微信网站建设柳州做网站制作的公司有哪些
  • 买域名做网站推广都是些什么网站点击后的loading是怎么做的
  • 北京网站优化技术泰州自助建站软件
  • 公司企业网站建设目的站长统计官方网站
  • 集团公司网站模板wordpress更换主题方法
  • 临沂网站建设电话建设网站审批手续
  • 国外做健康的网站专门做鞋子的网站吗
  • 手机网站支持微信支付吗北京短视频拍摄
  • 做静态网站工资多少网站前期推广
  • 做预算查价格的网站是哪个好网站开发维护多少钱
  • 个人互动网站365建筑人才网
  • 天津外贸公司网站制作淘客cms网站建设
  • 怎样做微网站网站建设pc指什么软件
  • 四川 网站建设wordpress腾讯地图插件下载
  • 宁波网站公司哪家好百度关键词搜索量排名
  • 北京国税局网站做票种核定时眉山网站优化
  • 网站备案授权书成都网站建设十强企业
  • 网站流量图怎么做的wordpress单号管理系统
  • 生活服务网站建设方案天猫店铺装修做特效的网站
  • 公众号做视频网站会封吗开发微分销系统
  • 情侣博客网站模板下载kindeditor for wordpress
  • 广东网站备案进度查询长沙seo网络营销推广