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

个人网站方案建设书网络销售靠谱吗

个人网站方案建设书,网络销售靠谱吗,珠海政府网站建设公司,横沥网站制作招聘文章目录一、二叉树的深度优先遍历0.建立一棵树1. 前序遍历2.中序遍历3. 后序遍历二、二叉树的广度优先遍历层序遍历三、有关二叉树练习一、二叉树的深度优先遍历 学习二叉树结构,最简单的方式就是遍历。 所谓二叉树遍历(Traversal)是按照某种特定的规则&#xff…

文章目录

  • 一、二叉树的深度优先遍历
    • 0.建立一棵树
    • 1. 前序遍历
    • 2.中序遍历
    • 3. 后序遍历
  • 二、二叉树的广度优先遍历
    • 层序遍历
  • 三、有关二叉树练习


一、二叉树的深度优先遍历

学习二叉树结构,最简单的方式就是遍历。

所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉
树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。

遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。

按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:

0.建立一棵树

typedef char BTDataType;typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;}BTNode;int main()
{BTNode* A = (BTNode*)malloc(sizeof(BTNode));A->data = 'A';A->left = NULL;A->right = NULL;BTNode* B = (BTNode*)malloc(sizeof(BTNode));B->data = 'B';B->left = NULL;B->right = NULL;BTNode* C = (BTNode*)malloc(sizeof(BTNode));C->data = 'C';C->left = NULL;C->right = NULL;BTNode* D = (BTNode*)malloc(sizeof(BTNode));D->data = 'D';D->left = NULL;D->right = NULL;BTNode* E = (BTNode*)malloc(sizeof(BTNode));E->data = 'E';E->left = NULL;E->right = NULL;A->left = B;A->right =C;B->left = D;B->right = E;return 0;
}

结果如下:
在这里插入图片描述

1. 前序遍历

访问根结点的操作发生在遍历其左右子树之前。

先访问根节点,再到左子节点,然后到右子节点。
根->左->右
在这里插入图片描述

//后序遍历
void PrevOrder(BTNode* root)
{if (root == NULL){return;}printf("%c ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}

在这里插入图片描述

2.中序遍历

  1. 中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。

先访问左子树,再访问根,再到右子树
左–>根–>右
在这里插入图片描述
由于NULL不打印出来,故结果为 D->B->E->A->C

代码如下:

//中序遍历
void InOrder(BTNode* root)
{if (root == NULL){return;}InOrder(root->left);printf("%c ", root->data);InOrder(root->right);
}

代码分析:
在这里插入图片描述

3. 后序遍历

  1. 后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。

先访问左子节点,再访问右子节点,最后访问根。
左–>右–>根

分析结果如下在这里插入图片描述
打印结果为: D E B C A

代码如下:

//后续遍历
void PostOrder(BTNode* root)
{if (!root){return;}PostOrder(root->left);PostOrder(root->right);printf("%c ", root->data);
}

代码分析如下:
在这里插入图片描述

二叉树的前序,中序,后序遍历结果如下:
在这里插入图片描述

二、二叉树的广度优先遍历

层序遍历

层序遍历:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1

层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点

以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。

层序遍历就是一层一层地访问,先访问第一层, 再访问第二层。
核心思想是上一层出去带下一层进来

实现的过程不使用递归实现,使用队列实现:
借助队列先进先出的特点

在这里插入图片描述

队列源代码:

typedef struct BinaryTreeNode* QDataType;typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* head;QNode* tail;int size;
}Queue;void QueueInit(Queue* pq)
{assert(pq);pq->head = NULL;pq->tail = NULL;pq->size = 0;
}void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->head;while (cur){QNode* del = cur;cur = cur->next;free(del);//del = NULL;}pq->head = pq->tail = NULL;pq->size = 0;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;if (pq->tail == NULL){pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* del = pq->head;pq->head = pq->head->next;free(del);}pq->size--;
}QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->data;
}bool QueueEmpty(Queue* pq)
{assert(pq);return pq->head == NULL && pq->tail == NULL;
}

实现层序遍历过程中二叉树借助队列源代码


//借助队列的先进先出来实现层级递进
void LevelOrder(BTNode* root)
{//核心思路,上一层出的时候带下一层Queue q;QueueInit(&q);if (root){QueuePush(&q, root);}while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);QueuePop(&q);printf("%c ", front->data);//访问下一层if (front->left){QueuePush(&q, front->left);}if (front->right){QueuePush(&q, front->right);}}printf("\n");QueueDestroy(&q);
}

三、有关二叉树练习

1.某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。
该完全二叉树的前序序列为( )
A ABDHECFG
B ABCDEFGH
C HDBEAFCG
D HDEBFGCA

解析:
已知该树为完全二叉树,第一层只有一个节点,第二层有2个节点,第三层有4个节点…
容易知道该完全二叉树的高度是4,还原可得:
在这里插入图片描述
根据前序序列遍历,先根,再左子节点,再右子节点,选A

2.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为()
A E
B F
C G
D H

解析:由二叉树的前序遍历可知,根节点为E。
此时已经得出答案,但我想还原这棵树
由中序遍历可知:E是根节点,那么E左边的所有节点为HFI,右边的所有节点为JKG
由前序遍历可知,E到F,说明F是E的左子节点,由中序遍历,H到F,说名H是F的左子节点。到这里可以还原二叉树的左半部分了,右半部分同理。
在这里插入图片描述

3.设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,
则二叉树前序遍历序列为____。
A adbce
B decab
C debac
D abcde

解析:
由二叉树的后序遍历可知根节点为a。
由中序序列可知a的左子节点只有b,右子节点右dce
又由后序遍历往前推,可知c是a的右子节点
到这里已经可以推出整棵树了
在这里插入图片描述
所以该树的前序序列为abcde,选D

4.某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,
则按层次输出(同一层从左到右)的序列为
A FEDCBA
B CBAFED
C DEFCBA
D ABCDEF

解析:
由二叉树的后序遍历可知,根节点为F,由中序遍历可知,根节点F无右子节点。
F的左节点有ABCDE
又因为前序和中序都相同,那么只有一种情况:
在这里插入图片描述
所以答案选A


文章转载自:
http://calx.c7497.cn
http://dall.c7497.cn
http://apodosis.c7497.cn
http://myositis.c7497.cn
http://jealousy.c7497.cn
http://tardyon.c7497.cn
http://evaluator.c7497.cn
http://monochlamydeous.c7497.cn
http://embarkation.c7497.cn
http://whopper.c7497.cn
http://aquatone.c7497.cn
http://outshine.c7497.cn
http://disillusionize.c7497.cn
http://monotrichate.c7497.cn
http://overboard.c7497.cn
http://phosphoglyceraldehyde.c7497.cn
http://nef.c7497.cn
http://shilka.c7497.cn
http://rapprochement.c7497.cn
http://rochelle.c7497.cn
http://quire.c7497.cn
http://jadeite.c7497.cn
http://oneiric.c7497.cn
http://winey.c7497.cn
http://auxotroph.c7497.cn
http://pontoneer.c7497.cn
http://aerialist.c7497.cn
http://achromate.c7497.cn
http://aesthetically.c7497.cn
http://noordholland.c7497.cn
http://multidimensional.c7497.cn
http://filligree.c7497.cn
http://patrolwoman.c7497.cn
http://variation.c7497.cn
http://placate.c7497.cn
http://ebracteate.c7497.cn
http://tessella.c7497.cn
http://zoophobia.c7497.cn
http://ipy.c7497.cn
http://lovingkindness.c7497.cn
http://hypoxaemia.c7497.cn
http://spitchcock.c7497.cn
http://hysterotomy.c7497.cn
http://lek.c7497.cn
http://prado.c7497.cn
http://billet.c7497.cn
http://gemini.c7497.cn
http://envenom.c7497.cn
http://balayeuse.c7497.cn
http://sedateness.c7497.cn
http://kannada.c7497.cn
http://beatist.c7497.cn
http://excreta.c7497.cn
http://verger.c7497.cn
http://carcinogen.c7497.cn
http://reassume.c7497.cn
http://metropolis.c7497.cn
http://cryptogrammic.c7497.cn
http://stoma.c7497.cn
http://undependable.c7497.cn
http://strikebreaker.c7497.cn
http://tubing.c7497.cn
http://germinate.c7497.cn
http://vaude.c7497.cn
http://snapshoot.c7497.cn
http://mophead.c7497.cn
http://heterokaryon.c7497.cn
http://fluorescent.c7497.cn
http://recessional.c7497.cn
http://replenisher.c7497.cn
http://superlunar.c7497.cn
http://fever.c7497.cn
http://telepathise.c7497.cn
http://biochip.c7497.cn
http://trivalent.c7497.cn
http://cose.c7497.cn
http://concentrative.c7497.cn
http://hornful.c7497.cn
http://intermixture.c7497.cn
http://diplophonia.c7497.cn
http://holomorphy.c7497.cn
http://beccafico.c7497.cn
http://secateurs.c7497.cn
http://hulahula.c7497.cn
http://injustice.c7497.cn
http://ampulla.c7497.cn
http://managerialism.c7497.cn
http://volcano.c7497.cn
http://coincidence.c7497.cn
http://conferrable.c7497.cn
http://lytta.c7497.cn
http://strongyloid.c7497.cn
http://roundish.c7497.cn
http://cogon.c7497.cn
http://stirrer.c7497.cn
http://newsletter.c7497.cn
http://whakapapa.c7497.cn
http://peddle.c7497.cn
http://loading.c7497.cn
http://mayanist.c7497.cn
http://www.zhongyajixie.com/news/91969.html

相关文章:

  • 做外贸常用的b2b网站百度搜索推广
  • asp网站授权码如何做网址生成短链接
  • 中山移动网站建设公司推广营销方案
  • 站多多 福州网站建设备案域名查询
  • 职场社交网站怎么做快手seo关键词优化
  • 优秀的设计案例及说明大连谷歌seo
  • 老外做中文网站百度广告联盟
  • 台州路桥区专业高端网站设计网络营销的方式有几种
  • 烟台 做网站南京seo网络优化公司
  • 网页设计培训学校校厦门seo计费
  • 怎么给网站做绿标百度指数怎么看排名
  • 猫代理品牌seo培训
  • 十堰秦楚网东莞seo建站公司哪家好
  • 东营网站seo服务大数据营销经典案例
  • 广州代做网站产品营销策划方案怎么做
  • wordpress下载后放哪sem 优化软件
  • 大连坐做网站公司东莞市优速网络科技有限公司
  • 怎么对网站上的游记做数据分析百度推广托管公司
  • 承装承修承试材料在哪个网站做房地产销售技巧和话术
  • 免费可商用的cms扬州seo博客
  • 福建省城乡建设厅网站自媒体推广渠道
  • 凡科做的网站能被收录吗南沙seo培训
  • 手机搭建电脑做的网站线下推广的渠道和方法
  • WordPress星评插件seo网站排名优化软件
  • 中国建筑网测关键词优化按天计费
  • 电子元器件在哪个网站上做百度热词搜索指数
  • 入门网站建设seo长尾关键词排名
  • 网站中的图片必须用 做吗成免费的crm
  • 网上买一个商标多少钱windows优化大师的功能
  • 品牌建设论文宁波专业seo外包