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

政府网站建设先进个人先进事迹网络营销专业是干嘛的

政府网站建设先进个人先进事迹,网络营销专业是干嘛的,html5可以做动态网站吗,如何自己做资源类网站目录 层序遍历 思路图解 代码实现 二叉树遍历的应用 输出二叉树中的叶节点 代码实现 求二叉树的高度 思路图解 代码实现 二元运算表达式树及其遍历 由两种遍历序列确定二叉树 层序遍历 层序遍历可以通过一个队列来实现,其基本过程为: 先根…

目录

层序遍历

思路图解

代码实现 

二叉树遍历的应用

 输出二叉树中的叶节点

代码实现

求二叉树的高度

思路图解 

代码实现 

 二元运算表达式树及其遍历

由两种遍历序列确定二叉树 


层序遍历

层序遍历可以通过一个队列来实现,其基本过程为:

先根节点入队,然后:

  1. 从队列中取出一个元素;
  2. 访问该元素所指的节点;
  3. 若该元素所指节点的左、右孩子节点非空, 则将其左、右孩子的指针顺序入队。
  4. 循环123的步骤,直到队列为空。

思路图解

代码实现 

void LevelOrderTraversal(BinTree BT)
{Queue Q;BinTree T;if (!BT){return; //若为空树则直接返回}Q = CreateQueue(); //创建并初始化队列QAdd(Q, BT);while (!IsEmptyQ(Q)){T = DeleteQ(Q);printf("%d\n", T->data);  //访问取出来的节点//若该元素的左右孩子节点不为空,则依次入队if (T->Left){AddQ(Q, T->Left);     }if (T->Right){AddQ(Q, T->Right);}}
}

 

二叉树遍历的应用

 输出二叉树中的叶节点

之前讲过的递归先序遍历二叉树写法很简单,而要输出二叉树中的叶节点,就可以在进行遍历的过程中进行检测,如果为叶节点则输出,否则继续遍历。 叶节点即左孩子节点为空、右孩子节点也为空。

代码实现

void PreOrderPrintLeaves(BinTree BT)
{if (BT){if (!BT->Left && !BT->Right)printf("%d ", BT->data);PreOrderPrintLeaves(BT->Left);PreOrderPrintLeaves(BT->Right);}
}

求二叉树的高度

树是递归定义的,一颗二叉树的高度应该等于左右两颗子树的最大高度+1 求二叉树的高度,利用的是后序遍历的一种程序框架来实现的。

思路图解 

代码实现 

int PostOrderGetHeight(BinTree BT)
{int HL, HR, MaxH;if (BT){HL = PostOrderGetHeight(BT->Left);   //求左子树的高度HR = PostOrderGetHeight(BT->Right);  //求右子树的高度MaxH = (HL > HR) ? HL : HR;          //取左右子树的最大高度return (MaxH + 1);                   //返回树的高度}else{return 0;                            //空树的高度为0}
}

 

 二元运算表达式树及其遍历

对上面的表达式树进行三种遍历,可以得到三种不同的访问结果:

试着分别写出上面表达式树前序中序和后序遍历的不同表达式,复习一遍之前讲的树的遍历。 



先序遍历可以得到前缀表达式:++a*bc*+*defg

中序遍历可以得到中缀表达式:a+b*c+d*e+f*g

后序遍历可以得到后缀表达式:abc*+de*f+g*+

但需要注意的是:中缀表达式会受到运算符优先级的影响,所以单单这样通过中序遍历得出的中缀表达式是不完全准确的。

解决方法是:在输出左子树之前,先输出一个左括号,左子树结束的时候再输出一个右括号。

由两种遍历序列确定二叉树 

已知三种遍历中的任意两种遍历序列,能否唯一确定一颗二叉树呢?

答案是:两种遍历序列中,必须要有一种是中序遍历才能够唯一确定一颗二叉树。

假设没有中序,看下面两个序列:

先序遍历序列:A B

后序遍历序列:B A 

像这样一组简单的序列,只有先序遍历序列和后序遍历序列的情况下,就有两颗是符合的二叉树,其中根节点是容易确定的,先序的第一个节点就是根,后序的最后一个节点就是根;但是左右节点是不好区分的,所以就导致了只有先序序列和后序序列的情况下没法唯一地确认一颗二叉树。

下面就来看看,已知先序序列和中序序列,怎么样来确定一颗二叉树。

思路:

  1. 根据先序遍历序列第一个节点确定根节点;
  2. 根据根节点在中序遍历序列中分割出左右两个子序列;
  3. 对左子树和右子树分别递归使用相同的方法继续分解。 

 

举个例子清晰一下思路:

先序序列: abcdefghij

中序序列: cbedahgijf 

所以最终通过先序遍历序列和中序遍历序列唯一确定的二叉树就为:

 


 end


学习自:MOOC数据结构——陈越、何钦铭 

http://www.zhongyajixie.com/news/5461.html

相关文章:

  • 网站域名301设置百度搜索广告价格
  • 新媒体与网站建设seo排名助手
  • 学做网站论坛会员账户百度竞价托管哪家好
  • 做管理培训的网站有什么怎样做好网络营销推广
  • 6网站建设做网站秘密入口3秒自动进入
  • 福州营销型网站建设价格百度快照不更新怎么办
  • 建筑交流平台windows优化大师有必要安装吗
  • 企业网站的特征无锡营销型网站建站
  • 广州 网站 设计近期网络营销的热点事件
  • 日照外贸网站建设网站推广排名教程
  • ps怎样做网站设计百度推广代理赚钱
  • 四川做网站设计的公司网络营销心得体会800字
  • logo设计在线生成 免费武汉企业seo推广
  • 搭建好网站生情好域名后怎么做网址检测
  • 用dw做网站的基本步骤如何优化网页
  • c语言做的网站湖南百度seo排名点击软件
  • 珠海公司网站制作公网络营销主要有哪些特点
  • 湖北建设信息网站免费域名解析
  • axure做的网站可以用吗xp优化大师
  • 西安做网站商城的公司百度产品推广怎么收费
  • 哪种nas可以做网站服务器在线刷关键词网站排名
  • 装修设计公司官网成都网站seo外包
  • 网站开发实现电脑版和手机版的切换快排seo
  • 做百度手机网站点互联网舆情信息
  • 做网站会用到什么语言网站seo快速
  • 有做思维图的网站吗中国疫情最新情况
  • 横沥网站建设公司友情链接平台
  • 党委网站建设实施方案郑州抖音推广
  • 做网站哪里最好投资网站建设方案
  • 广州市住房和城乡建设部网站英文外链代发