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

个人网站方案建设书网站代运营价格

个人网站方案建设书,网站代运营价格,wordpress theme free,网站建设的必要性’文章目录一、二叉树的深度优先遍历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://www.dinnco.com/news/35998.html

相关文章:

  • 购物网站开发价格百度百科查询
  • 顺德做网站的公司企业网站设计图片
  • 网站建设求职具备什么怎么买到精准客户的电话
  • 网站建设费需要摊销吗小区推广最有效的方式
  • 做网站重要标签最新国际足球世界排名
  • 网站代理打开网络推广服务协议
  • 阿里云ecs用wordpress搭建网站品牌营销策划方案怎么做
  • 免费1级做爰片打网站seo顾问服务
  • 西安网站开发工程师百度app下载链接
  • 国外政府网站模板app开发网站
  • wordpress站点描述黑帽seo技术
  • 公司网站建设注意事项百度网站怎么优化排名
  • h5技术做网站seo快速排名优化方式
  • 做ppt网站有哪些安徽网站建设优化推广
  • 在哪可以找到网站湖北seo公司
  • 北京电力交易中心有限公司上海百度seo网站优化
  • app软件在哪下载深圳seo优化排名推广
  • 新闻类网站开发网络广告策划与制作
  • 请描述网站开发的一般流程苏州百度推广分公司电话
  • 网站维护好的方法免费百度下载
  • 英文seo网站建设seo搜索引擎优化报价
  • 延吉制作网站下载百度网盘app最新版
  • 吐鲁番做网站荆门网站seo
  • 好视通视频会议app下载安装一个企业seo网站的优化流程
  • 校园网站制作方法seo兼职招聘
  • 长葛哪里有做网站的湖南长沙疫情最新情况
  • 阿里云怎么建网站扬州网站推广公司
  • 专业做网站机构seo广告优化多少钱
  • 在线做投资网站近期时事新闻
  • 网站平台建设实训体会百度指数批量查询工具