问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

试用文字表达按照层次遍历二叉树的思想。

发布网友 发布时间:2022-04-25 14:08

我来回答

2个回答

热心网友 时间:2023-10-08 13:43

  二叉树的遍历

  遍历概念

  所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。
  遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。

  遍历方案

  1.遍历方案
  从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
  (1)访问结点本身(N),
  (2)遍历该结点的左子树(L),
  (3)遍历该结点的右子树(R)。
  以上三种操作有六种执行次序:
  NLR、LNR、LRN、NRL、RNL、RLN。
  注意:
  前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。

  2.三种遍历的命名
  根据访问结点操作发生位置命名:
  ① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
  ——访问结点的操作发生在遍历其左右子树之前。
  ② LNR:中序遍历(InorderTraversal)
  ——访问结点的操作发生在遍历其左右子树之中(间)。
  ③ LRN:后序遍历(PostorderTraversal)
  ——访问结点的操作发生在遍历其左右子树之后。
  注意:
  由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtlee)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。

  遍历算法

  1.中序遍历的递归算法定义:
  若二叉树非空,则依次执行如下操作:
  (1)遍历左子树;
  (2)访问根结点;
  (3)遍历右子树。

  2.先序遍历的递归算法定义:
  若二叉树非空,则依次执行如下操作:
  (1) 访问根结点;
  (2) 遍历左子树;
  (3) 遍历右子树。

  3.后序遍历得递归算法定义:
  若二叉树非空,则依次执行如下操作:
  (1)遍历左子树;
  (2)遍历右子树;
  (3)访问根结点。

  4.中序遍历的算法实现
  用二叉链表做为存储结构,中序遍历算法可描述为:
  void InOrder(BinTree T)
  { //算法里①~⑥是为了说明执行过程加入的标号
  ① if(T) { // 如果二叉树非空
  ② InOrder(T->lchild);
  ③ printf("%c",T->data); // 访问结点
  ④ InOrder(T->rchild);
  ⑤ }
  ⑥ } // InOrder

  遍历序列

  1.遍历二叉树的执行踪迹
  三种递归遍历算法的搜索路线相同(如下图虚线所示)。
  具体线路为:
  从根结点出发,逆时针沿着二叉树外缘移动,对每个结点均途径三次,最后回到根结点。

  2.遍历序列
  (1) 中序序列
  中序遍历二叉树时,对结点的访问次序为中序序列
  【例】中序遍历上图所示的二叉树时,得到的中序序列为:
  D B A E C F
  (2) 先序序列
  先序遍历二叉树时,对结点的访问次序为先序序列
  【例】先序遍历上图所示的二叉树时,得到的先序序列为:
  A B D C E F
  (3) 后序序列
  后序遍历二叉树时,对结点的访问次序为后序序列
  【例】后序遍历上图所示的二叉树时,得到的后序序列为:
  D B E F C A
  注意:
  (1) 在搜索路线中,若访问结点均是第一次经过结点时进行的,则是前序遍历;若访问结点均是在第二次(或第三次)经过结点时进行的,则是中序遍历(或后序遍历)。只要将搜索路线上所有在第一次、第二次和第三次经过的结点分别列表,即可分别得到该二叉树的前序序列、中序序列和后序序列。
  (2) 上述三种序列都是线性序列,有且仅有一个开始结点和一个终端结点,其余结点都有且仅有一个前趋结点和一个后继结点。为了区别于树形结构中前趋(即双亲)结点和后继(即孩子)结点的概念,对上述三种线性序列,要在某结点的前趋和后继之前冠以其遍历次序名称。
  【例】上图所示的二叉树中结点C,其前序前趋结点是D,前序后继结点是E;中序前趋结点是E,中序后继结点是F;后序前趋结点是F,后序后继结点是A。但是就该树的逻辑结构而言,C的前趋结点是A,后继结点是E和F。

  二叉链表的构造

  1. 基本思想
  基于先序遍历的构造,即以二叉树的先序序列为输入构造。
  注意:
  先序序列中必须加入虚结点以示空指针的位置。
  【例】
  建立上图所示二叉树,其输入的先序序列是:ABD∮∮CE∮∮F∮∮。

  2. 构造算法
  假设虚结点输入时以空格字符表示,相应的构造算法为:
  void CreateBinTree (BinTree *T)
  { //构造二叉链表。T是指向根指针的指针,故修改*T就修改了实参(根指针)本身
  char ch;
  if((ch=getchar())=='') *T=NULL; //读人空格,将相应指针置空
  else{ //读人非空格
  *T=(BinTNode *)malloc(sizeof(BinTNode)); //生成结点
  (*T)->data=ch;
  CreateBinTree(&(*T)->lchild); //构造左子树
  CreateBinTree(&(*T)->rchild); //构造右子树
  }
  }
  注意:
  调用该算法时,应将待建立的二叉链表的根指针的地址作为实参。
  【例】设root是一根指针(即它的类型是BinTree),则调用CreateBinTree(&root)后root就指向了已构造好的二叉链表的根结点。

热心网友 时间:2023-10-08 13:43

所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。
遍历方案
  二叉树的前序遍历
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
⑴访问结点本身(N),
⑵遍历该结点的左子树(L),
⑶遍历该结点的右子树(R)。
以上三种操作有六种执行次序:
NLR、LNR、LRN、NRL、RNL、RLN。
注意:
前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 海城社保局个人查询老农保 java实现二叉树层次遍历 在海城办社保卡什么时间给发卡? 前序遍历建立数据类型为float二叉树,按层次遍历二叉树输出 海城市劳动局电话是多少? 二叉树遍历演示 海城市人力资源和社会保障局官网 在按层次遍历二叉树的算法中,需要借助的辅助数据结构是 用c语言编一个算法 按层次遍历二叉树的结点? 试完成二叉树按层次(同一层自左至右)遍历的算法。 二叉树的遍历操作实现 编写按层次顺序(同一层从左至右)遍历二叉树的算法 二叉树 按层遍历 递归的算法 二叉树的层次遍历以及用层次遍历算法显示所有叶子节点 设完成二叉树按层次(同一层自左至右)遍历的算法。 南京2015年三级公共营养师上半年考试试题 公共营养师的考试试题???哪能下载 二级营养师营养学基础试题中有简答和论述题? 公共营养师考试试卷共几道题,都是什么类型? 2020营养师基础知识试题及答案(7) 鞍山市人力资源和社会保障局网 以二叉连表做存储结构,试编写按层次顺序遍历二叉树的算法 辽宁省人力资源和社会保障局官网 二叉树层次遍历问题,高手帮忙啊~ 辽宁海城伤残在哪个部门鉴定 海城个人如何办社保 社保局和人力资源与社会保障局是啥关系???乡镇、社保局哪个好些?? 微信好友被删了,自己又不知道他的了。怎么找回? 把微信好友删除了!我怎么找回他的微信!没有记住,也没有手机号 微信好友被删了,自己又不知道他的了。怎么找回? 微信好友被我不小心删了,怎么找回 怎么找回删除微信好友 登不上,显示账号或密码错误怎么回事? 申请了个怎么登录不上 如果突然就登不上去了 用密码和验证码都没用怎么办? 手机登录不了怎么办? 我的怎么登不上去了微信验证码都显示不正确? 我的被封 了,怎么登都登不上,怎么办? 登录不上怎么办 被盗了登不上去怎么办怎么找回来?