(数据结构课程设计)二叉树_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
24页免费45页7下载券16页免费18页2下载券14页7下载券 17页1下载券9页3下载券9页1下载券15页3下载券
喜欢此文档的还喜欢8页免费23页4下载券13页2下载券23页4下载券9页1下载券
(数据结构课程设计)二叉树|二​叉​树​的​创​建​ ​及​遍​历
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢(数据结构课程设计)二叉树_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
24页免费9页1下载券45页7下载券16页免费18页2下载券 14页7下载券17页1下载券9页3下载券15页3下载券
喜欢此文档的还喜欢8页免费23页4下载券9页免费9页1下载券8页1下载券
(数据结构课程设计)二叉树|一​份​完​整​的​数​据​库​课​程​设​计​哦​!
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢c++,数据结构 二叉树问题_百度知道
c++,数据结构 二叉树问题
h",lch != NULL) {
temp=p, void deletenode(treenode *p), int array[10]={8,rch=NULL, ",,
p_node->, ',另外删除节点怎么实现特别是左右子树都有的情况,<,2, ",
} }}void tree,没有你要查找的数。",number),",int num),<,请输入要查找的数,p->,5,rch),
p=p->,endl,
binarytree,data)
insert(&(p_node->,
p_node->,<,",endl<,",void tree, ",,rch == NULL) {
delete p,<,<,endl<,3,",
p_node->,<,
if (num <,endl<, treenode *root,<,
preorder(p->, } else if (p!=NULL) {
if (x == p->,
preorder(p->,deletenode(tempptr),
else if (x>,,",<,data)
search(p->,preorder(treenode *p){ if (p!=NULL)
cout<,<,/,lch),
else if (x<, } else if (*p!=NULL) {
p_node = *p,<,
cout<,int x),6,public,deletenode(treenode *p){ treenode *temp, not all control paths return a value请问这是什么问题,<,
for (int i=0, tempptr=binarytree,9}, cout<,endl<, ",root),lch), } else if (p->,
if (*p == NULL) {
p_node=new treenode,*******************************",
*p = p_node, binarytree,data=num,rch), tree() {
root=NULL,root),二叉树 3,data<, cout<,num), void inorder(treenode *p),postorder(binarytree, } }void main(){
int number,
}}void tree, binarytree,<, ",struct treenode { int data,,<, if (p->,root,num),int x){
if (p == NULL) {
cout<,,10,p->,11,data<,
if (num >, cout<,",search(binarytree,},number,, void preorder(treenode *p), warning C4715,*******************************", void postorder(treenode *p),
if (tempptr!=NULL) {
binarytree,后序遍历,data)
insert(&(p_node->,
inorder(p->,
cout<,<, ,,<,preorder(binarytree,lch=NULL,中序遍历,lch),, ",postorder(treenode *p){ if (p!=NULL)
postorder(p->,insert(&binarytree,<,endl,
treenode *lch,",p->,
cout<,data<,insert(treenode **p,
delete temp, }}这个排序二叉树中的search函数实现搜索节点的功能,root),endl<, } else if (p->,
/,p->,<, }}void tree,cpp(97) ,data)
cout<, ",*******************************",root, } }treenode* tree,,rch), }}void tree,int num){ treenode* p_node,>, cout<,,
cout<,rch,12,
p=NULL,search',search(treenode *p,rch == NULL && p->,<,找到了。",,<, cout<, p_node->,<,endl,
postorder(p->,前序遍历,,i++)
binarytree,,lch,<,<,root),,data)
search(p->, p_node->,*rch,lch == NULL && p->,#include ", cin>,rch),inorder(binarytree,iostream,
} void insert(treenode **p,x),inorder(treenode *p){
if (p!=NULL)
inorder(p->,,inorder(binarytree,",<,<,i<,",lch),<,rch != NULL) {
temp=p,p->,要查找的数
treenode *tempptr,endl, binarytree,",",7,",
treenode *search(treenode *p,<,<,lch == NULL && p->,x),endl,但是编译的时候出现警告project\,},
tree binarytree,4,
delete temp,
return p,<,rch,<,
return NULL,
} cout<,tree,lch,array[i]),class tree{public,
运行程序后windows就强行关闭程序了。就走不到下一步,
提问者采纳
',的有条件的遍历。2,/,二叉树先序遍历 { if(t) {
cout<,你先设置我最佳答案后,你好像是在动态申请一个struct tree类型的结构空间时,t->,一般通过先序序列确定一个二叉树是需要一个中序序列的,
preorder(t->,lchild),练后再看书时会发现书上的方法还真是好啊 我可以帮助你,二叉树先序遍历void preorder(tree *t)/,而没有对左右孩子两个指针域赋值,而下面却以这两指针为参数递归调用左右孩子,先序遍历是先根再左右子树,, } else {
preorder(t->,data<,所以动态申请的时候要格外小心啊。写程序就要多练,<,,这个顺序是必须的,但是这种操作是很危险的,,t->,虽然你的程序中没有发生访存错误,else,参数是tree *t,只对结构中的data域进行了赋值,但是这样得到的树是不确定的,data=c,用先序建立二叉树我明白你程序中的意思是想用递归方式来由根到左右子树来构成一个二叉树,在其中t=new tree,我百度Hii教你。,只靠一个先序序列二叉树是不能确定的。3, ',,不是你程序中写的if, }}这个是遍历不起来的,rchild),<,,1,错误比较多说说比较明显的,,还要说说关于new的使用在你用先序构建二叉树的方法中,
其他类似问题
按默认排序
其他2条回答
} void insert(treenode **p,,",<,要查找的数
treenode *tempptr,<,/,", cout<,lch),
if (*p == NULL) {
p_node=new treenode,",
postorder(p->,
} cout<,number, void deletenode(treenode *p),
cout<,p->,,
} }}void tree, ",/,",data=num,,
p_node->,后序遍历,class tree{public,postorder(binarytree,data<,endl,<,number),<,search(binarytree, } }treenode* tree,endl<,<, ", }}void tree, delete p,
preorder(p->,endl,lch=NULL,<, ",
treenode *search(treenode *p,11, treenode *root,lch, }},array[i]),7,<,3,<, ",rch),<, } else if (*p!=NULL) {
p_node = *p,,insert(treenode **p, tempptr=binarytree,
p_node->, cout<,int num){ treenode* p_node,num),public,endl<,*******************************",rch), ",
if (num >,int x),<,rch != NULL)
deletenode(p->,p->,<, } else if (p!=NULL) {
if (x == p->,preorder(binarytree,h",preorder(treenode *p){ if (p!=NULL)
cout<,10,x),请输入要查找的数,
if (num <,data<, cout<,2,,
/,inorder(treenode *p){
if (p!=NULL)
inorder(p->, p_node->,",,",*rch, cout<,root), void inorder(treenode *p),
if (tempptr!=NULL) {
binarytree, binarytree, void preorder(treenode *p),root, binarytree,
*p = p_node,p->,没有你要查找的数。",,root), ",,endl<,
p_node->,*******************************",p->,},*******************************",,9}, ",data)
cout<,struct treenode { int data,<,
inorder(p->,rch),postorder(treenode *p){ if (p!=NULL)
postorder(p->,void tree,lch != NULL)
deletenode(p->,}void tree,<,<, cin>,rch,rch),,<,<,,
cout<,root),insert(&binarytree,
tree binarytree,<,",
preorder(p->,",,endl,<, p_node->,num),
return p,4,data)
return search(p->,inorder(binarytree,p->,deletenode(treenode *p){ if (p->,<,endl,data)
return search(p->,前序遍历,",rch=NULL,root, cout<,lch),inorder(binarytree,
binarytree,6,<,",中序遍历,search(treenode *p,endl<,<,endl,data)
insert(&(p_node->,
treenode *lch,x),#include ",<,data<,endl<,iostream,rch),",
cout<,<, int array[10]={8,
} return NULL,deletenode(tempptr),lch),找到了。",",lch),/, }}void tree, binarytree,i<,int x){
if (p == NULL) {
cout<, tree() {
root=NULL,12,<,int num),<,,<,<,>,i++)
binarytree,<,
return NULL,
else if (x<, void postorder(treenode *p),root),5, if (p->,,
for (int i=0, p=NULL,}void main(){
int number,},
else if (x>,<,lch),data)
insert(&(p_node->,
你使用了迭代,所以在某些if语句分支没有返回一个指针,不过不影响。
二叉树的相关知识
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁我这里搜集了31个不同的数据结构课程设计题目的实验报告和原程序,放在了我的豆丁..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数据结构课程设计之二叉树和树的遍历
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口||||||||||
C++YW:二叉(1)
剀疤崾:您可以c粝旅娴逆接x或打印C++YW:二叉(1)全文。
@些天⑴c了CSDN挠,改了我以前的一些看法。回^看我以前的|西,我m@本懿M,但我是按照它的安排在一cc的;@泳е铝耍疫^多的在意械钠的更多是f“@本印保x了我@些的初衷――o正在WY的人一些助。
正像我在前面所f的,m然F有的教科疾皇呛芎侠恚偃HH是抱怨@c,那o于DR街。m然本人的水平B初都虿簧希辽傧我做一cL,以后@Tn的教授方法必⒁稽cc于合理。
因此,后面不在按照系拇涡颍⒈局H茫ㄋ惴ǎQ定Y”的思想碇v解,常教科嫌械模静辉僦攸c⑹觯ǔ酥攸c,例如AVL涞钠胶庑D),――因此,在看本文的同r,一定要有一本教科_@只是一L,希望大家多提F意。
因楝F世界中存在@“洹边@NY――族V、等制度、目分等等,而榱搜芯窟@},必能Υ妫绾Υ⑷Q于所需要的操作。@里有},是否答嬖诳洹S行J涠际欠强盏模浔硎镜氖且环NFY,而0不是自然担晃矣眠^的教科际钦f可以有空洌然是榱撕投浣y一。@]有什么原t上的差e,反正就是一NT。
二叉淇梢哉f是人假想的一模型,因此,答锌盏亩涫oh的。二叉涫怯行虻模筮有一孩子和右有一的二叉涫遣煌煽洹W鲞@ǎ且槿x予了左孩子和右孩子不同的意x,在二叉涞母鞣N弥校宄目吹健O旅嬷恢v解式Y。看各NvY的lF一有趣的F象:在二叉溥@里,基本操作有算涓摺⒏鞣N遍v,就是]有插入、h除――那涫窃趺唇⑵淼模科@很好理解,τ诜蔷性的浣Y,插入h除操作不在一定的法tㄏ拢呛o意x的。因此,只有在具w的弥校胁迦h除操作。
更多热菡看C/C++技gn}&&Y&&Y教程n},或
颉⒆笾羔、右指肯定是必的。除非很少用到c的pH,或者是Y源o,建h附加一pH指,@o很多算法矸奖悖绕涫窃谶@“空gQrg”的r代。
template
strUCtBTNode
BTNode(Tdata=T(),BTNode*left=NULL,BTNode*right=NULL,BTNode*parent=NULL)
:data(data),left(left),right(right),parent(parent){}
BTNode*left,*right,*
基本的二叉漕
template
classBTree
public:
BTree(BTNode*root=NULL):root(root){}
~BTree(){MakeEmpty();}
voidMakeEmpty(){destroy(root);root=NULL;}
protected:
BTNode*root;
private:
voiddestroy(BTNode*p)
destroy(p->left);
destroy(p->right);
二叉涞谋v
基本上有4N遍v方法,先、中、后根,逐印.初我@很迷惑,搞@么多干什么?到了后面才明白,@是不同的眯枰摹@纾卸二叉涫欠裣嗟龋灰涓c不同,那么就不等,@然@r要用先序遍v;而h除二叉洌仨先h除左右子洌缓蟛拍h除根c,@r就要用后序遍v。
H上,搞@么多遍v方法,根本原因是在却嬷Υ娴涫欠蔷性Y。τ谟到MΥ娴亩洌@些名目繁多的方法都是]有必要的。利用C++的封b和重d特性,@些遍v方法能很清楚的表_。
更多热菡看C/C++技gn}&&Y&&Y教程n},或
1.前序遍v
public:
voidPreOrder(void(*visit)(T&data)=print){PreOrder(root,visit);}
private:
voidPreOrder(BTNode*p,void(*visit)(T&data))
if(p){visit(p->data);PreOrder(p->left,visit);PreOrder(p->right,visit);}
2.中序遍v
public:
voidInOrder(void(*visit)(T&data)=print){InOrder(root,visit);}
private:
voidInOrder(BTNode*p,void(*visit)(T&data))
if(p){InOrder(p->left,visit);visit(p->data);InOrder(p->right,visit);}
3.后序遍v
public:
voidPostOrder(void(*visit)(T&data)=print){PostOrder(root,visit);}
private:
voidPostOrder(BTNode*p,void(*visit)(T&data))
if(p){PostOrder(p->left,visit);PostOrder(p->right,visit);visit(p->data);}
4.哟伪v
voidLevelOrder(void(*visit)(T&data)=print)
queue*>a;BTNode*p=//得#include
while(p)
visit(p->data);
if(p->left)a.push(p->left);if(p->right)a.push(p->right);
if(a.empty())p=a.front();a.pop();
附注:缺省的visit函print如下
private:
staticvoidprint(T&data){cout<
5.不用5姆沁fw中序遍v
更多热菡看C/C++技gn}&&Y&&Y教程n},或
有parent指r,可以不用F非fw的中序遍v,咸岬搅擞羞@N方法,但]o出例程。
public:
BTNode*next()
if(!current)returnNULL;
if(current->right){current=current->while(current->left)current=current->}
BTNode*y=current->
while(y&¤t==y->right){current=y;y=y->}
current=y;
private:
BTNode*
上面的函的苁current指向前移右位置,假如要遍v整棵二叉洌枰current指向中序序列的第一c,例如下面的成T函担
public:
voidfirst(){current=while(current->left)current=current->}
更多热菡看C/C++技gn}&&Y&&Y教程n},或
剀疤崾:您可以c粝旅娴逆接x或打印C++YW:二叉(1)全文。
本站刊登此文只鬟f信息,并不表示同或者反ψ髡哂^c。
如果此热萁o您造成了面影或者p失,本站不承魏呜任。
如果热萆婕鞍},及rc我取得系。