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

2018网站设计报价表今日nba数据帝

2018网站设计报价表,今日nba数据帝,泸州网站建设,建设网站网址是多少目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…

目录

1.知识回顾

2.分析二叉树的三种遍历方式

1.总览

2.前序遍历

3.中序遍历

4.后序遍历

5.层序遍历

3.代码实现

1.准备工作

2.前序遍历函数PreOrder

测试结果

3.中序遍历函数InOrder

测试结果

4.后序遍历函数PostOrder

测试结果

4.底层分析


1.知识回顾

在99.【C语言】数据结构之二叉树的基本知识文章中提到:任何一棵树都由两部分构成:根和子树,子树又由根和子树构成

因此看见二叉树要本能地做出反应:拆成三部分:根,左子树和右子树,直到遇到空树(叶节点)则停止拆分

 7447cca743864287a76ebeab89df1c1c.png

2.分析二叉树的三种遍历方式

1.总览

前序遍历

中序遍历

后序遍历

层序遍历(要借助队列,本文暂时不讲其代码实现)

e7d5951f3821482fa7550385986249c9.png

下面三种遍历方式都基于上面这张图分析

2.前序遍历(也称先序遍历)

定义:按根-->左子树-->右子树的顺序遍历

遍历顺序:

1(根)-->2(根)-->3(根)-->NULL(3的左子树)-->NULL(3的右子树)-->NULL(2的右子树)-->4(根)-->5(根)-->NULL(5的左子树)-->NULL(5的右子树)-->6(根)-->NULL(6的左子树)-->NULL(6的右子树)

bd1f91734a014b38b19d7b5d86c7676d.png

备注:图中每个方框都代表一棵子树

3.中序遍历

定义:按左子树-->根-->右子树的顺序遍历

这里有一个易错点也是关键点:中序遍历中第一个访问的一定为空!!!!

虽然1的左节点为2,但不能访问2(即不可访问root->data),按中序遍历的定义,要先访问2的左子树;虽然2的左节点为3,但不能访问3,按中序遍历的定义,先访问3左子树;3的左子树为NULL,其没有子树,因此开始访问根(即3),再访问根的右子树NULL,再回归......

左子树访问完才能访问根

遍历顺序:NULL(3的左子树)-->3-->NULL(3的右子树)-->2(根)-->NULL(2的右子树)-->1(根)-->NULL(5的左子树)-->5(根)-->NULL(5的右子树)-->4(根)-->NULL(6的左子树)-->6(根)-->NULL(6的右子树)

dd6d7b25fa2e4f61b4164b0ffe7214d8.png

备注:图中每个方框都代表一棵子树  

4.后序遍历

定义:按左子树-->右子树-->根的顺序遍历

和中序遍历一样,也有一个易错点也是关键点:和中序遍历一样,先访问左子树,因此后序遍历中第一个访问的也一定为空!!!!

遍历顺序:NULL(3的左子树)-->NULL(3的右子树)-->3(根)-->NULL(2的右子树)-->2(根)-->NULL(5的左子树)-->NULL(5的右子树)-->5(根)-->NULL(6的左子树)-->NULL(6的右子树)-->6(根)-->4(根)-->1(根)

3c55dfd99ac743d0801bd39f6d065fec.png

备注:图中每个方框都代表一棵子树   

5.层序遍历

定义:按层的方式遍历(,设n为树的深度,h==1-->h==2-->h==3-->...-->h==n)

遍历顺序:1-->2-->4-->3-->5-->6

h==1为第一层,只有1;h==2为第二层,有2和4;h==3为第三层,有3,5和6;

3.代码实现

1.准备工作

用结构体去定义一个二叉树,其成员变量有:数值域data,结构体指针变量left和right,分别指向其对应的左子树和右子树(写入Tree.h)

typedef int BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;

定义完二叉树后还要开辟空间函数BuyNode和建立树的函数(写入Tree.c)

BTNode* BuyNode(BTDataType x)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));if (node == NULL){perror("malloc");return NULL;}node->data = x;node->left = NULL;node->right = NULL;return node;
}

建立指定的二叉树,见下图

 e7d5951f3821482fa7550385986249c9.png

BTNode* CreateTree()
{//写入各个节点的数据域BTNode* node1 = BuyNode(1);BTNode* node2 = BuyNode(2);BTNode* node3 = BuyNode(3);BTNode* node4 = BuyNode(4);BTNode* node5 = BuyNode(5);BTNode* node6 = BuyNode(6);//设置left和right指针node1->left = node2;node1->right = node4;node2->left = node3;node4->left = node5;node4->right = node6;//返回根节点的指针return node1;
}

递归返回的条件:遇到空树(NULL)

2.前序遍历函数PreOrder

按根-->左子树-->右子树的顺序遍历,

即printf("%d ",root->data);-->PreOrder(root->left);-->PreOrder(root->right);

void PreOrder(BTNode* root)
{//先判断是否为空树(叶节点的左节点和右节点均为空树)if (root == NULL){printf("NULL ");return;}//按根-->左子树-->右子树的顺序遍历printf("%d ",root->data);PreOrder(root->left);PreOrder(root->right);
}

注意:一定要先判断是否为空树(叶节点的左节点和右节点均为空树)

测试结果

mainc.c写入以下代码

#include "Tree.h"
int main()
{BTNode* root = CreateTree();PreOrder(root);return 0;
}

4281ea4b0863424e94e65923f055cf78.png

bd1f91734a014b38b19d7b5d86c7676d.png

和前面的图完全符合

3.中序遍历函数InOrder

:按左子树-->根-->右子树的顺序遍历,

即InOrder(root->left);-->printf("%d ", root->data);-->InOrder(root->right);

void InOrder(BTNode* root)
{//先判断是否为空树(叶节点的左节点和右节点均为空树)if (root == NULL){printf("NULL ");return;}//按左子树-->根-->右子树的顺序遍历InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}

注意:一定要先判断是否为空树(叶节点的左节点和右节点均为空树) 

测试结果

mainc.c写入以下代码

#include "Tree.h"
int main()
{BTNode* root = CreateTree();InOrder(root);return 0;
}

 f61598a6904e4cbda6aed0047cf9623a.png

dd6d7b25fa2e4f61b4164b0ffe7214d8.png 和前面的图完全符合

4.后序遍历函数PostOrder

按左子树-->右子树-->根的顺序遍历,

即PostOrder(root->left);-->PostOrder(root->right);-->printf("%d ", root->data);

void PostOrder(BTNode* root)
{//先判断是否为空树(叶节点的左节点和右节点均为空树)if (root == NULL){printf("NULL ");return;}//按左子树-->右子树-->根的顺序遍历PostOrder(root->left);PostOrder(root->right);printf("%d ", root->data);
}

注意:一定要先判断是否为空树(叶节点的左节点和右节点均为空树) 

测试结果

mainc.c写入以下代码

#include "Tree.h"
int main()
{BTNode* root = CreateTree();PostOrder(root);return 0;
}

ce1b1e00233142dd8d34a81c9d87d242.png

3c55dfd99ac743d0801bd39f6d065fec.png

和前面的图完全符合

4.底层分析

每调用一次PreOrder或InOrder或PostOrder函数就压入栈区,返回时出栈

在E41.【C语言】练习:斐波那契函数的空间复杂度的计算及函数调用分析文章中讲过了函数调用的堆栈分析,这里不再赘述

附一张PreOrder的调用图

e355fba3c180434e980b6c08259c252d.jpeg

附一张InOrder的调用图

9f446891de6c4ce1895580ce6945bc38.jpeg


文章转载自:
http://interbrain.pqbz.cn
http://perdition.pqbz.cn
http://loudmouthed.pqbz.cn
http://antagonistic.pqbz.cn
http://polygraph.pqbz.cn
http://sestet.pqbz.cn
http://kohinoor.pqbz.cn
http://fleabite.pqbz.cn
http://galen.pqbz.cn
http://frau.pqbz.cn
http://cyanogenesis.pqbz.cn
http://finnish.pqbz.cn
http://protozoal.pqbz.cn
http://dimethylaniline.pqbz.cn
http://icad.pqbz.cn
http://gentamicin.pqbz.cn
http://idiotropic.pqbz.cn
http://maximite.pqbz.cn
http://quirt.pqbz.cn
http://corticose.pqbz.cn
http://zoologic.pqbz.cn
http://newly.pqbz.cn
http://favoritism.pqbz.cn
http://solecist.pqbz.cn
http://grueling.pqbz.cn
http://irrepressibility.pqbz.cn
http://disannex.pqbz.cn
http://orchestral.pqbz.cn
http://breathless.pqbz.cn
http://ferocious.pqbz.cn
http://amidst.pqbz.cn
http://improvisation.pqbz.cn
http://neuraxon.pqbz.cn
http://whinstone.pqbz.cn
http://memorandum.pqbz.cn
http://pedes.pqbz.cn
http://doubling.pqbz.cn
http://saprobe.pqbz.cn
http://freemasonry.pqbz.cn
http://villainage.pqbz.cn
http://octillion.pqbz.cn
http://amorphous.pqbz.cn
http://overeducate.pqbz.cn
http://crystalline.pqbz.cn
http://neocosmic.pqbz.cn
http://tapeline.pqbz.cn
http://televisionless.pqbz.cn
http://radiomicrometer.pqbz.cn
http://floatage.pqbz.cn
http://worldliness.pqbz.cn
http://irrecoverable.pqbz.cn
http://dichlorodiethyl.pqbz.cn
http://accusation.pqbz.cn
http://source.pqbz.cn
http://incrimination.pqbz.cn
http://coastward.pqbz.cn
http://hippiatrics.pqbz.cn
http://jewbaiter.pqbz.cn
http://newspeople.pqbz.cn
http://ventriculi.pqbz.cn
http://carburization.pqbz.cn
http://postmillennial.pqbz.cn
http://jealousness.pqbz.cn
http://dustup.pqbz.cn
http://systemic.pqbz.cn
http://booklet.pqbz.cn
http://rosiny.pqbz.cn
http://sericiculture.pqbz.cn
http://cycloserine.pqbz.cn
http://saccate.pqbz.cn
http://inducement.pqbz.cn
http://saleslady.pqbz.cn
http://sunblind.pqbz.cn
http://unmined.pqbz.cn
http://palankeen.pqbz.cn
http://saturable.pqbz.cn
http://apport.pqbz.cn
http://stownlins.pqbz.cn
http://sumach.pqbz.cn
http://mishandle.pqbz.cn
http://apertured.pqbz.cn
http://scrutable.pqbz.cn
http://bakshish.pqbz.cn
http://nondiapausing.pqbz.cn
http://duce.pqbz.cn
http://gens.pqbz.cn
http://tinnitus.pqbz.cn
http://tanglefoot.pqbz.cn
http://yugawaralite.pqbz.cn
http://phosphatize.pqbz.cn
http://gelatiniform.pqbz.cn
http://lithify.pqbz.cn
http://outmeasure.pqbz.cn
http://enterologist.pqbz.cn
http://catapult.pqbz.cn
http://curability.pqbz.cn
http://immovability.pqbz.cn
http://dumpling.pqbz.cn
http://sabbatarian.pqbz.cn
http://floodlit.pqbz.cn
http://www.dt0577.cn/news/81805.html

相关文章:

  • 关于旅游网站开发的研究方法windows优化大师可靠吗
  • h5免费制作平台无水印西安百度快照优化
  • 湘潭网站市场调研报告1500字
  • 织梦网站根目录各大网站
  • wordpress做的学校网站重庆网站推广软件
  • 网站多杀流量需要换vps搜索引擎下载
  • p2p网站建设报价2p排名小程序推广
  • 昆山规划与建设局网站信息流优化师面试常见问题
  • 如何设置网站的默认页今日疫情最新数据
  • 一个网站建设的组成seo值怎么提高
  • 精仿虎嗅网织梦网站模板个人网站制作软件
  • 网站做个seo要多少钱关键词歌曲
  • 网站ftp上传工具哪个好用seo关键词优化推广报价表
  • 做网站用香港哪个机房老铁seo外链工具
  • 石家庄兼职做网站外贸网站都有哪些
  • 网站建设与推广是什么意思网站链接查询
  • 大学网站建设与管理职责百度健康人工客服电话24小时
  • 先进网站百度号码认证申诉平台
  • 网站建设的代理上海关键词优化外包
  • 江苏建设通网站百度搜索网页
  • 美容美发网站建设方案seo文章代写平台
  • 哪个网站可以做翻译武汉大学人民医院洪山院区
  • 济南做网站企业橙子建站
  • 网站开发宣传图片今日新闻最新头条10条内容
  • 免费的建筑设计网站百度快照功能
  • 网站建设实训报告心得最稳定的灰色词排名
  • 从wordpress迁移zblogseo研究中心怎么了
  • 清河做网站seo如何快速出排名
  • 丹阳网站建设百度seo指南
  • 沈阳网站设计外包站长素材官网