建树

更新时间:2022-12-27 06:24:24 阅读: 评论:0


2022年12月27日发(作者:heyjude孙燕姿)

C语⾔建树

话不多说,先看代码:

#include

#include

#include

structTreeNode{//结构体⽤来储存树结点,包括节点的值data,分别指向左孩⼦右孩⼦的指针;

intdata;

structTreeNode*left,*right;

};

voidSetTree(structTreeNode**root,intval){//建树函数,传参为根节点的地址,新增数;

structTreeNode*t;//储存新结点;

t=(structTreeNode*)malloc(sizeof(structTreeNode));

t->data=val;

t->left=NULL;

t->right=NULL;

if((*root)==NULL){//if根结点为空,把新增节点设为根结点;

(*root)=t;

return;

}

if((*root)->data>val)SetTree(&((*root)->left),val);//新增值⼩于该结点的值,放到左孩⼦,递归;

elSetTree(&((*root)->right),val);//⼤于,右孩⼦,递归;

}

voidShowTree(structTreeNode*root){//打印函数;中序遍历;

if(root==NULL){

return;

}

//left;

ShowTree(root->left);

//root;

printf("%d",root->data);

//right;

ShowTree(root->right);

}

intmain(){

intN;

intval;

structTreeNode*root;

root=NULL;

scanf("%d",&N);

while(N--){

scanf("%d",&val);

SetTree(&root,val);

}

ShowTree(root);

return0;

}

注意:上边代码,树的打印顺序是中序遍历;

有中则必有先后;

树的遍历有三种⽅法,前序遍历,中序遍历,后序遍历;

如上图

前序遍历(DLR)是先遍历根结点,然后遍历左⼦树,最后遍历右⼦树。

ABDGHECKFIJ;

中序遍历(LDR)是先遍历左⼦树,然后遍历根结点,最后遍历右⼦树。

GDHBEACKFIJ;

后序遍历(LRD)是先遍历左⼦树,然后遍历右⼦树,最后遍历根节点。

GHDEBKJIFCA;

其实代码很好写的,中序遍历就不再重复写了,下⾯写前序遍历和后序遍历;

前序遍历:

voidDLRShowTree(structTreeNode*root){//打印函数;前序遍历;

if(root==NULL){

return;

}

//root;

printf("%d",root->data);

//left;

DLRShowTree(root->left);

//right;

DLRShowTree(root->right);

}

后序遍历:

voidLRDShowTree(structTreeNode*root){//打印函数;后序遍历;

if(root==NULL){

return;

}

//left;

LRDShowTree(root->left);

//right;

LRDShowTree(root->right);

//root;

printf("%d",root->data);

}

#include

#include

#include

usingnamespacestd;

typedefstructnode*position;

typedefpositionTree;

structnode{

intval;

Treeleft,right;

};

TreebuildTree(Treeroot,intx){

if(root==NULL){

Treerr=(structnode*)malloc(sizeof(structnode));

rr->val=x;

rr->left=rr->right=NULL;

root=rr;

returnroot;

}

if(xval)root->left=buildTree(root->left,x);

elroot->right=buildTree(root->right,x);

returnroot;

}

voidprintTree(Treeroot){

if(root==NULL)return;

printTree(root->left);

cout<val<

printTree(root->right);

}

intmain(){

intn;

cin>>n;

intx;

Treeroot=NULL;

for(inti=0;i

cin>>x;

root=buildTree(root,x);

}

printTree(root);

return0;

}

本文发布于:2022-12-27 06:24:24,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/38649.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:网页翻译在线
下一篇:heel什么意思
标签:建树
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图