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

鹿泉手机网站建设广州微网站开发

鹿泉手机网站建设,广州微网站开发,宁波妇科最有名的医院,wordpress主题 windows live二叉树的遍历 #x1f4ab;二叉树的结点结构定义#x1f4ab;创建一个二叉树结点#x1f4ab;在主函数中手动创建一颗二叉树#x1f4ab;二叉树的前序遍历#x1f4ab;调用栈递归——实现前序遍历#x1f4ab;递归实现中序和后序遍历 #x1f4ab;二叉树的结点结构定义 … 二叉树的遍历 二叉树的结点结构定义创建一个二叉树结点在主函数中手动创建一颗二叉树二叉树的前序遍历调用栈递归——实现前序遍历递归实现中序和后序遍历 二叉树的结点结构定义 typedef struct BinaryTreeNode {int val;struct BinaryNode* left;struct BinaryNode* right; }BTNode;创建一个二叉树结点 我们来写一个函数BuyNode(x)函数用于创建二叉树结点。 用动态开辟函数malloc函数进行动态开辟并强制转换为BTNode型用变量node来去管理开辟的空间。 我们初始化结点其val即为传入的参数x左右指针left和right都设为NULL。 //创建一个二叉树结点 BTNode* BuyNode(int x) {BTNode* node (BTNode*)malloc(sizeof(BTNode));if (node NULL){perror(malloc fail);}else{node-val x;node-left NULL;node-right NULL;} }在主函数中手动创建一颗二叉树 我们在主函数中创建上面这样一颗二叉树。 首先我们需要开辟6个结点但此时6个结点之间没有任何的联系我们需要改变其中一些结点的指针域left和right来使得结点之间产生联系。 int main() {BTNode* node1 BuyNode(1);BTNode* node2 BuyNode(2);BTNode* node3 BuyNode(3);BTNode* node4 BuyNode(4);BTNode* node5 BuyNode(5);BTNode* node6 BuyNode(6);node1-left node2;node1-right node4;node1-rightnode3;node2-left node4;node3-left node5;node3-right node6;return 0; }二叉树的前序遍历 首先我们先要了解以下二叉树前序的前序遍历。 二叉树的前序遍历 根--左子树--右子树 对于我们上面的这颗二叉树 1--左--右左子树和右子树也采用前序遍历的方式: 左子树 2--4右子树 3--5--6所以这颗二叉树的前序遍历为 1--2--4--3--5--6正是由于这样的思想将一个树根--左--右的左和右仍然是一颗树接着再拆分…直到左子树和右子树的左右结点为空时。 所以这样的思想我们就利用递归的想法就可以完成一颗二叉树的遍历。 调用栈递归——实现前序遍历 调用栈程序在执行时如果程序调用一个函数它会先把这个函数压入栈中等到这个函数返回结果(return )后它才会从栈中弹出。 递归程序在执行时会不断地调用自身把函数压入栈中当最后一个函数也就是基线条件出现时再逐渐清空栈空间。 下面我们根据这段代码来画图理解一些递归的思想。 //递归前序遍历一棵树 void PreOrder(BTNode* root) {if (root NULL){printf(NULL);return;}printf(%d, root-val);PreOrder(root-left);PreOrder(root-right);return 0; }我们按照步骤来执行以下程序 ①主函数中进行了函数调用参数为node1 压栈 node1不为空打印结点 ②执行PreOrder(root-left)再次调用函数参数为node2 进行压栈 node2不为空打印 ③执行PreOrder(root-left),再次调用函数参数为node4压栈 node4不为空打印 ④执行PreOrder(root-left)再次调用函数参数为NULL压栈 这是函数参数为NULL进入if语句进行打印 并return返回这时出栈。 ⑤y由于这段代码当函数的参数为node4时PreOrder(node4-left)已经有return所以这时程序会接着往下面执行PreOrder(node4-right) 这时再次调用函数函数参数为NULL压栈打印再出栈。 ⑥ 这时对于函数PreOrder (node4)已经执行完语句 PreOrder(node4-left)和语句PreOrder(node4-right)了后执行 return 0函数有返回结果所以出栈。 ⑦此时我们该执行 node2的右结点了。 对于PreOrder(node2-right)中函数函数即是NULL所以先压栈然后打印然后出栈。 ⑧此时函数PreOrder(node2) 的PreOrder(node2-left) 和PreOrder(node2-right) 都已经执行完了即已经对node2结点的左右子树遍历完成执行return 0 返回这时PreOrder(node2) 出栈。 在此时我们已经对node1的左子树遍历完成接下来同遍历左子树一样我们对右子树进行遍历。 这时输出为 递归实现中序和后序遍历 根据上面前序的递归我觉得最重要的代码是 if (root NULL){printf(NULL);return;}它是递归中能否回溯的一个关键。 下面写中序遍历 //递归中序遍历二叉树 void Order(BTNode* root) {if (root NULL){printf(NULL );return;}Order(root-left);printf(%d , root-val);Order(root-right);return 0; }递归后序遍历一棵树 //递归后序遍历一颗二叉树 void PostOrder(BTNode* root) {if (root NULL){printf(NULL );return;}PostOrder(root-left);PostOrder(root-right);printf(%d , root-val);return 0; }前中后序遍历结果分别为
http://www.sadfv.cn/news/72289/

相关文章:

  • 虚拟机做网站推动高质量发展的最终目的是什么
  • 尚品中国多年专注于高端网站建设东方城乡与住房建设部网站
  • 有哪些网站可以做图片打赏网页制作的专业
  • 网站备案 接入商名称老网站权重低的原因
  • 做视频网站需要流量wordpress中文文章排版插件
  • 用flash做网站建设邯郸市中考管理平台官网
  • 做网站搜爬闪小程序开发教程知乎
  • 奕腾网站建设做网站需要交钱吗
  • 北京 集团公司网站建设大淘客做网站视频
  • 芜湖市建设工程质量监督站官方网站安徽省铜陵市建设银行网站
  • 南昌网站做wordpress卡核销
  • 微信怎样将网站的内容做备案 网站 收录
  • 门户网站建设 突出服务装潢设计公司排行
  • 公司网站建设文案wordpress怎么修改栏目标题
  • 网站可以用PS设计吗2023免费网站推广大全
  • 响应式网站宽度wordpress 标签页
  • spring可以做多大的网站做计划网站
  • 乡镇信息公开网站建设制度电脑系统7怎么打开wordpress
  • 济南网站建设公司 推荐行知科技网站根目录在哪里
  • 网站正在建设中空白模板效果图网址
  • 用旧手机做网站做网站后台运营这个工作怎么样
  • 织梦系统做网站商业网站首页怎么做
  • 包头微网站开发seo排名优化公司价格
  • 国外做健康的网站什么是主页
  • 布吉网站建设哪家便宜竞价网站做招商加盟可以不备案吗
  • 养生网站设计一个专门做试题的网站
  • 南阳网站制作公司东莞网站建设 手机壳
  • 简单网站建设优化.net网站开发实训体会
  • 网站建设需求确认书徐州网站制作费用
  • 网站平台开发报价表怎么做国外做外贸哪个网站好些