二叉树深度遍历(二叉树的深度优先遍历就是二叉树前序遍历吗)

2024-06-04 23:58:00 37

二叉树深度遍历(二叉树的深度优先遍历就是二叉树前序遍历吗)

本文目录

二叉树的深度优先遍历就是二叉树前序遍历吗

这是因为图的深度优先遍历算法先访问所在结点,再访问它的邻接点。与二叉树的先序遍历先访问子树的根结点,再访问它的孩子结点(邻接点)类似。图的广度优先遍历算法类似于二叉树的按层次遍历。

算法设计 递归实现遍历二叉树,输出每个节点的度

既然是树,除叶节点的度是1以外,其他节点的度都是2。#include《iostream》usingnamespacestd;structsegtree{inta,b;}tree;voidbuildtree(intl,intr,introot=0)/*建树*/{tree.b=r;if(l==r)return;intmid=(l+r)》》1;root《《=1;buildtree(l,mid,root+1);buildtree(l,mid,root+2);}voiddfs(intlevel,introot=0)/*深度遍历,递归法*/{for(inti=1;i《level;i++)cout《《’’;cout《《"Lv"《《level《《":\n";if(tree.b){root《《=1;dfs(level+1,root+1);dfs(level+1,root+2);}}struct{introot,level;}st;voidbfs()/*层次遍历*/{inttop=1,first=0;st.root=0;st.level=1;while(first《top){for(inti=st.level;i》1;i--)cout《《’’;cout《《"Lv"《《st.level《《":\n";if(tree.b){st.root*2+1;st.level+1;st.root*2+2;st.level+1;}first++;}}intmain(){intt,i;cout《《"以线段树为例,生成一个二叉树。\n\n";buildtree(1,9);cout《《"以深度遍历该树(深搜):\n";dfs(1);cout《《"以层次遍历该树(宽搜):\n";bfs();system("pause");return0;}

树的深度遍历和先序遍历是一回事吗广度遍历呢

先序,后序,中序针对二叉树。深度、广度针对普通树。深度遍历:从树根开始扫描,顶层扫描完了,从一层最左(也可以右)面的结点往下层扫描,直到下层已无结点,这时所有靠最左(右)的结点全部扫描完毕,从树梢往上退一层,看这层旁有无兄弟结点,有的话还是一样从最左(右)边开始扫描,这是个递归概念,利用这一方法来遍历整棵树。广度遍历:从树根开始扫描,顶层扫描完了,扫描一层的所有结点,扫描二层的所有结点,……,扫描最底层的结点。

深度遍历二叉树这题怎么做,求高手指点一下,谢谢!

-12-04 19:07按层次输入,这样可以根据实际需要建立树型,更为实用。但我的程序仍存在一个问题,就是遍历(2):输出为空的孩子时都会多输出两个空孩子。不知道怎么改。 //二叉树结点类型为字符型的情况 #include 《stdio.h》 #include 《stdlib.h》 #include 《string.h》 #define null 0 #define MaxSize 1024 typedef struct tree { /*声明树的结构*/ struct tree *left; /*存放左子树的指针*/ struct tree *right; /*存放又子树的指针*/ char data; /*存放节点的内容*/ } treenode, * b_tree; /*声明二叉树的链表*/ b_tree Q; /*建立二叉树,按完全二叉树的层次遍历序列输入*/ b_tree createbtree() { char ch; int front,rear; b_tree root,s; root=NULL; front=1;rear=0; ch=getchar(); getchar(); while(ch!=’?’) { s=NULL; if(ch!=’.’) { s=(b_tree)malloc(sizeof(treenode)); s-》data=ch; s-》left=NULL; s-》right=NULL; } rear++; Q=s; if(rear==1) root=s; else { if(s&&Q) if(rear%2==0) Q-》left=s; else Q-》right=s; if(rear%2==1) front++; } ch=getchar(); getchar(); } return root; } /*先序遍历打印二叉排序树*/ void preorder_btree(b_tree root) { b_tree p=root; if(p!=null) { printf("%3c",p-》data); preorder_btree(p-》left); preorder_btree(p-》right); } } /* 中序遍历打印二叉排序树*/ void inorder_btree(b_tree root) { b_tree p=root; if(p!=null){ inorder_btree(p-》left ); printf("%3c",p-》data ); inorder_btree(p-》right ); } } /*后序遍历打印二叉排序树*/ void postorder_btree(b_tree root) { b_tree p=root; if(p!=null) { postorder_btree(p-》left ); postorder_btree(p-》right ); printf("%3c",p-》data ); } } /*求树的高度*/ int treedepth(b_tree bt) { int hl,hr,max; if(bt!=null) { hl=treedepth(bt-》left); hr=treedepth(bt-》right); max=(hl》hr)?hl:hr; return (max+1); } else return 0; } int count=0; /*求叶子结点总数*/ int leafcount(b_tree bt) { if(bt!=null) { leafcount(bt-》left); leafcount(bt-》right); if(bt-》left==null&&bt-》right==null) count++; } return count; } void paintleaf(b_tree bt) { if(bt!=null) { if(bt-》left==null&&bt-》right==null) printf("%3c",bt-》data); paintleaf(bt-》left); paintleaf(bt-》right); } } typedef b_tree ElemType ; /*定义队列结点类型*/ typedef struct QueueNode { ElemType data; struct QueueNode *next; } QueueNode; /*定义队列*/ typedef struct linkQueue { QueueNode * front; QueueNode * rear; }linkQueue; /*初始化队列*/ void initQueue(linkQueue * q) { q-》front=q-》rear =null; //----无头结点 } /*判断队列是否为空*/ int QueueEmpty(linkQueue * Q) { return (Q-》front==null)&&(Q-》rear==null); /*实际上只须判断队头指针是否为空即可*/ } /*入队操作*/ void EnQueue(linkQueue *Q,ElemType x) { /*将元素x插入链队列尾部*/ QueueNode *p=(QueueNode *)malloc(sizeof(QueueNode)); /*申请新结点*/ p-》data=x; p-》next=null; if(QueueEmpty(Q)) /*将x插入空队列*/ //----无头结点 Q-》front=Q-》rear=p; else { /*x插入非空队列的尾*/ Q-》rear-》next=p; /*p链到原队尾结点后*/ Q-》rear=p; /*队尾指针指向新的尾*/ } } /*出队操作*/ ElemType DeQueue (linkQueue *Q) { ElemType x; QueueNode *p; if(QueueEmpty(Q)) { printf("Queue underflow");/*下溢*/ exit(1) ; } p=Q-》front; /*指向对头结点*/ x=p-》data; /*保存对头结点的数据*/ Q-》front=p-》next; /*将对头结点从链上摘下*/ if(Q-》rear==p)/*原队中只有一个结点,删去后队列变空,此时队头指针已为空*/ Q-》rear=NULL; free(p); /*释放被删队头结点*/ return x; /*返回原队头数据*/ } void visit(b_tree p) { printf("%3c",p-》data); } void breadthFirst2(b_tree root) { b_tree p,tmp; linkQueue * q; tmp=(treenode *)malloc(sizeof(treenode)); q=(linkQueue *)malloc(sizeof(linkQueue)); tmp-》data=’?’; initQueue(q); p=root; if(p!=null) { EnQueue(q,p); while(!QueueEmpty(q)) { p=DeQueue(q); visit(p); if(p-》data!=’?’) { if(p-》left!=null) EnQueue(q,p-》left); else EnQueue(q,tmp); if(p-》right!=null) EnQueue(q,p-》right); else EnQueue(q,tmp); } } } } void breadthFirst(b_tree root) { b_tree p; linkQueue * q; q=(linkQueue *)malloc(sizeof(linkQueue)); initQueue(q); p=root; if(p!=null) { EnQueue(q,p); while(!QueueEmpty(q)) { p=DeQueue(q); visit(p); if(p-》left!=null) EnQueue(q,p-》left); if(p-》right!=null) EnQueue(q,p-》right); } } } int main() { char nodelist; int len,flag; char cmd; b_tree root; printf("\n\n----------------------------------------------------\n"); printf("\n****欢迎测试和修正本程序!本程序用以研究二叉树。****\n"); printf("\n----------------------------------------------------\n\n"); do { printf("\n\n 请选择你要执行的操作:\n\n"); printf(" c,C......创建一棵二叉排序树\n"); printf(" a,A......结束本程序\n\n"); flag=0; do { if(flag!=0) printf("选择操作错误!请重新选择!\n"); fflush(stdin); scanf("%c",&cmd); flag++; }while(cmd!=’c’&&cmd!=’C’&&cmd!=’a’&&cmd!=’A’); if(cmd==’c’||cmd==’C’) { printf("请输入那你所要创建的二叉树的结点的值,以‘?’结束):\n"); getchar(); root=createbtree(); do { flag=0; printf("\n\n 请选择你要对这棵二叉树所做的操作:\n\n"); printf(" x,X......先序遍历这棵二叉树\n"); printf(" z,Z......中序遍历这棵二叉树\n"); printf(" h,H......后序遍历这棵二叉树\n"); printf(" b,B......层次遍历这棵二叉树\n"); printf(" d,D......求这棵二叉树的高度\n"); printf(" y,Y......求这棵二叉树的叶子总数\n"); printf(" j,J......输出这棵二叉树的叶子结点\n"); printf(" q,Q......结束对这棵二叉树的操作\n\n"); do { if(flag!=0) printf("选择操作错误!请重新选择!\n"); fflush(stdin); scanf("%c",&cmd); flag++; }while(cmd!=’x’&&cmd!=’X’&&cmd!=’z’&&cmd!=’Z’&&cmd!=’h’&&cmd!=’H’&&cmd!=’b’&&cmd!=’B’&&cmd!=’d’&&cmd!=’D’&&cmd!=’y’&&cmd!=’Y’&&cmd!=’j’&&cmd!=’J’&&cmd!=’q’&&cmd!=’Q’); switch(cmd) { case ’x’: case ’X’: printf("\n先序遍历开始:\n"); preorder_btree(root); printf("\n先序遍历结束\n\n"); break; case ’z’: case ’Z’: printf("\n中序遍历开始:\n"); inorder_btree(root); printf("\n中序遍历结束\n\n"); break; case ’h’: case ’H’: printf("\n后序遍历开始:\n"); postorder_btree(root); printf("\n后序遍历结束\n\n"); break; case ’b’: case ’B’: printf("\n层次遍历开始:\n"); printf("遍历(1):不输出为空的孩子\n"); breadthFirst(root); printf("\n"); printf("遍历(2):输出为空的孩子\n"); breadthFirst2(root); printf("\n层次遍历结束\n\n"); break; case ’d’: case ’D’: printf("\n这棵二叉树的高度:\n%d\n\n",treedepth(root)); break; case ’y’: case ’Y’: count=0; count=leafcount(root); printf("\n这棵二叉树的叶子总数为:\n%d\n\n",count); count=0; break; case ’j’: case ’J’: printf("\n这棵二叉树的叶子结点为:\n"); paintleaf(root); printf("\n"); break; } }while(cmd!=’q’&&cmd!=’Q’); } }while(cmd!=’a’&&cmd!=’A’); printf("\n\n----------------------------\n\n"); printf("****谢谢使用!欢迎指正!****\n\n"); printf("----------------------------\n\n"); printf("作者:Remainder 学号:07082107 时间:2008.11.23\n\n\n\n"); return 0; } /*(10 (8 5 3 34 23 73 15 34 56 32)。。。。。。结点数据整型时 6 1 2 3 4 5 6 4 a b c d */

二叉树深度遍历(二叉树的深度优先遍历就是二叉树前序遍历吗)

本文编辑:admin

更多文章:


java生成log日志文件(java 如何配置log4j日志文件保存路径)

java生成log日志文件(java 如何配置log4j日志文件保存路径)

本文目录java 如何配置log4j日志文件保存路径java怎么把数据库查出来的数据怎么写进日志文件log中在java项目中生成log有什么作用怎么让java项目打印日志java工程中如何使用log4j输出指定路径日志文件,是java工程,

2024年7月24日 02:38

正则表达式匹配字母开头(求ASP正则表达式,匹配必须以任意字母开头,包含字母数字下划线,且必须以.html结尾即匹配html文件名)

正则表达式匹配字母开头(求ASP正则表达式,匹配必须以任意字母开头,包含字母数字下划线,且必须以.html结尾即匹配html文件名)

本文目录求ASP正则表达式,匹配必须以任意字母开头,包含字母数字下划线,且必须以.html结尾即匹配html文件名求正则表达式,字母开头数字结束求ASP正则表达式,匹配必须以任意字母开头,包含字母数字下划线,且必须以.html结尾即匹配ht

2024年6月25日 13:01

god怎么读?god什么意思

god怎么读?god什么意思

本文目录god怎么读god什么意思godaddy怎么样god怎么读god 英Remember god is with you.记住上帝与你同在。god什么意思god 英 复数:gods n. 1.神 2.上帝, 天主 3.极受崇敬的

2024年6月25日 04:20

paused是什么意思啊(pause什么意思)

paused是什么意思啊(pause什么意思)

各位老铁们,大家好,今天由我来为大家分享paused是什么意思啊,以及pause什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录pause什

2024年8月14日 16:30

什么是合数定义(什么叫合数)

什么是合数定义(什么叫合数)

本文目录什么叫合数什么是合数什么是合数合数的定义合数什么意思合数的所有定义合数的定义,是什么什么叫合数合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数。最小的合数是4。其中

2024年6月29日 11:09

个人网站设计标志(如何设计一个网站的logo设计)

个人网站设计标志(如何设计一个网站的logo设计)

本文目录如何设计一个网站的logo设计我想给自己设计一个logo,但是不知道个人logo有什么特点个人如何设计自己的logo网站标签设计网站logo是什么网站设计中的logo是什么,怎么设计如何设计一个网站的logo设计如何设计一个网站的l

2024年7月2日 04:10

魔方新手入门(魔方新手入门教程)

魔方新手入门(魔方新手入门教程)

本文目录魔方新手入门教程魔方教程公式口诀七步 新手入门魔方新手入门魔方公式 新手入门魔方入门教程 新手魔方如何入门 初学者必备魔方解法魔方新手入门教程魔方的玩法新手入门教程如下1、初学者学习魔方时首先要记住:上右下右逆左顺,这一步是用来交换

2024年7月23日 05:41

数制转换计算器在线(2,6,8,10进制之间的转换)

数制转换计算器在线(2,6,8,10进制之间的转换)

其实数制转换计算器在线的问题并不复杂,但是又很多的朋友都不太了解2,6,8,10进制之间的转换,因此呢,今天小编就来为大家分享数制转换计算器在线的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录2,6,8,10进制

2024年7月19日 13:03

nativecode(function tostring native code 怎么办)

nativecode(function tostring native code 怎么办)

本文目录function tostring native code 怎么办native code是什么意思啊function tostring native code 怎么办当你把一个alert一个function的时候会把func里的代码

2024年7月10日 22:59

view的汉语(view的读音 什么意思)

view的汉语(view的读音 什么意思)

本文目录view的读音 什么意思view,sight,sence的区别查看的英文opinion,view与point的区别view的读音 什么意思语法标注解释 view英音: view的中文翻译名词 n. 1.视力;视野Victory i

2024年7月4日 08:53

foreign的名词(英语单词foreign是什么意思)

foreign的名词(英语单词foreign是什么意思)

本文目录英语单词foreign是什么意思英语词形转换 foreign——名词 jew——形容词 write——作家 Europe——形容词 be——过去式 certain—副词foreign的名词形式怎么写单词: foreign 、abro

2024年5月7日 18:22

onclick与click的区别(在javascript中,+on的事件,和不加on的事件有什么区别;如click和onclick;有什么不同)

onclick与click的区别(在javascript中,+on的事件,和不加on的事件有什么区别;如click和onclick;有什么不同)

本文目录在javascript中,+on的事件,和不加on的事件有什么区别;如click和onclick;有什么不同点击事件on和onclick 两者之间的区别onclick=““和$click有什么区别onclick和click的区别ng

2024年5月7日 16:39

react耐克图片(nike百元跑鞋推荐)

react耐克图片(nike百元跑鞋推荐)

大家好,关于react耐克图片很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于nike百元跑鞋推荐的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录nik

2024年7月4日 20:25

defines(《群星》修改defines.lua数值后无法进入游戏怎么办)

defines(《群星》修改defines.lua数值后无法进入游戏怎么办)

本文目录《群星》修改defines.lua数值后无法进入游戏怎么办define的名词是什么《群星》修改defines.lua数值后无法进入游戏怎么办把备份文件覆盖坏掉的defines.lua另外,用ultraedit来打开文件修改比直接用记

2023年12月13日 07:40

fopen打开二进制文件(若要用fopen函数打开一个新的二进制)

fopen打开二进制文件(若要用fopen函数打开一个新的二进制)

本文目录若要用fopen函数打开一个新的二进制C++中怎么打开一个二进制文件C语言fopen打不开文件若要用fopen()函数打开一个新的二进制文件,该文件要既能读也能写,则打开方式是打开二进制文件时,fopen函数可以用哪些打开方式c语言

2024年6月28日 06:57

ie禁用javascript(本地IE如何禁止,打开某网站时的JS调用)

ie禁用javascript(本地IE如何禁止,打开某网站时的JS调用)

本文目录本地IE如何禁止,打开某网站时的JS调用您的IE浏览器限制了Javascript脚本功能JS如何禁止IE访问如何在浏览器中如何关闭javascript功能浏览器怎么禁止javascript当前浏览器不支持 JavaScript 或阻

2024年7月3日 08:58

font weight solid(百度空间 CSS 求助)

font weight solid(百度空间 CSS 求助)

这篇文章给大家聊聊关于font weight solid,以及百度空间 CSS 求助对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录百度空间 CSS 求助photoshop做文字效果的问题百度空间 CSS 求助不显示标题文章大

2024年7月13日 13:10

key社新作(KEY社的动漫作品还有哪些)

key社新作(KEY社的动漫作品还有哪些)

本文目录KEY社的动漫作品还有哪些key社新作《Summer Pockets》有没有可能动画化key社 有几部作品key社最近要出什么新作品,最近刚玩完little busters是要出什么不是已经出了什么key社要出的新游戏是什么key

2024年7月18日 08:42

高性能ios应用开发(APP开发用什么软件工具)

高性能ios应用开发(APP开发用什么软件工具)

大家好,关于高性能ios应用开发很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于APP开发用什么软件工具的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录

2024年7月7日 19:10

五毛特效app软件下载(能p各种火焰的是什么手机p图软件实例如图)

五毛特效app软件下载(能p各种火焰的是什么手机p图软件实例如图)

本文目录能p各种火焰的是什么手机p图软件实例如图好莱坞大片中的特效究竟有多烧钱你们知道安卓手游有哪些好的下载软件吗五毛钱特效软件有哪些现在国内影视特效制作都用什么软件五毛特效的介绍短视频平台哪个能赚钱能p各种火焰的是什么手机p图软件实例如图

2024年7月22日 15:22

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索