正文
c语言创建一棵树函数 c语言创建一颗二叉树
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
数据结构 如何创建一棵树,请给出c语言详细代码,谢谢
刚刚回答了一个类似的问题,以下代码供参考:
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char TElemType;
typedef int Status;
typedef struct BiTNode { // 结点结构
TElemType data;
struct BiTNode *lchild, *rchild;
// 左右孩子指针
} BiTNode, *BiTree;
//以下是建立二叉树存储结构,空节点输入作为#结束标识
Status CreateBiTree(BiTree T) {
//请将该算法补充完整,参见第6章课件算法或课本
char ch;
scanf("%c",ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T-data=ch;
CreateBiTree(T-lchild);
CreateBiTree(T-rchild);
}
return OK;
} // CreateBiTree
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T-data);
Preorder(T-lchild);
Preorder(T-rchild);
}
}
void Inorder(BiTree T)
{ // 中序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Inorder(T-lchild);
printf("%c",T-data);
Inorder(T-rchild);
}
}
void Postorder(BiTree T)
{ // 后序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Postorder(T-lchild);
Postorder(T-rchild);
printf("%c",T-data);
}
}
//以下是求叶子结点数
void CountLeaf(BiTree T,int count){
//请将该算法补充完整,参见第6章课件算法
if(T){
if((!T-lchild)(!T-rchild))
count++;
CountLeaf(T-lchild,count);
CountLeaf(T-rchild,count);
}
}
//以下是求二叉树的深度
int Depth(BiTree T ){
//请将该算法补充完整,参见第6章课件算法
int depthval,depthLeft,depthRight;
if(!T) depthval=0;
else{
depthLeft = Depth(T-lchild);
depthRight = Depth(T-rchild);
if(depthLeftdepthRight)depthval = 1+depthLeft;
else depthval = 1+depthRight;
}
return depthval;
}
void main(){
BiTree T;
int s=0,d;
printf("\n creat of the bitree:\n");
CreateBiTree(T);
printf("\n output result of Preorder:\n");
Preorder(T);
CountLeaf(T,s);
d=Depth(T);
printf("\n leaves=%d\n",s);
printf("\n depth=%d\n",d);
}
用C语言建立一棵二叉表达树并求值
#include stdio.h
#include string.h
#include malloc.h
#include stdlib.h
#include math.h
#define STACK_SIZE 20
struct OPND
{
int num;
};
struct OPTR
{
char op;
};
struct OPND *ntop,*nbase;
struct OPTR *otop,*obase;
int InitStackNum()
{
nbase = (OPND *)malloc(STACK_SIZE * sizeof(OPND));
if(!nbase)
exit(-1);
ntop = nbase;
return(1);
}
int InitStackOP()
{
obase = (OPTR *)malloc(STACK_SIZE * sizeof(OPTR));
if(!obase)
exit(-1);
otop = obase;
return(1);
}
int PushOPND(int InNum)
{
ntop-num = InNum;
ntop++;
return(1);
}
int PushOPTR(char InOP)
{
otop-op = InOP;
otop++;
return(1);
}
int PopOPND()
{
ntop--;
return(ntop-num);
}
char PopOPTR()
{
otop--;
return(otop-op);
}
int GetTopNum()
{
int GetNum;
ntop--;
GetNum = ntop-num;
ntop++;
return(GetNum);
}
char GetTopOP()
{
char GetOP;
otop--;
GetOP = otop-op;
otop++;
return(GetOP);
}
char CompareOP(char ComChar) //此函数用于算符的优先级比较
{
char ComResult,GOP;
int i,j,a,b,c,d;
char StoreOP[4][2] = {{'+','-'},{'*','/'},{'(',')'},{'#','#'}};
GOP = GetTopOP();
for(i=0;i4;++i)
{
for(j=0;j2;++j)
{
if(GOP==StoreOP[i][j])
{
a=i;
b=j;
}
}
}
for(i=0;i4;++i)
{
for(j=0;j2;++j)
{
if(ComChar==StoreOP[i][j])
{
c=i;
d=j;
}
}
}
if((a==0c==0)||(a==1b==0)||(a==1c==1)||(GOP==')'ComChar!='(')||(ComChar==')'GOP!=')')||(ComChar=='#'GOP!='#'))
ComResult='';
else if((GOP==')'ComChar=='(')||(ComChar=='#'GOP!='#'))
{
printf("表达式输入错误,请重新输入!\n");
exit(-1);
}
else if(GOP=='('ComChar==')')
ComResult='=';
else
ComResult='';
return(ComResult);
}
int IsOP(char isop)
{
switch(isop)
{
case '+':
case '-':
case '*':
case '/':
case '(':
case ')':
return(1);
default:
return(0);
}
}
int Operate(char GetOP)
{
int a,b;
a = PopOPND();
b = PopOPND();
switch(GetOP)
{
case '+':
return(b+a);
case '-':
return(b-a);
case '*':
return(b*a);
case '/':
{
if(a==0)
{
printf("除数不能为0,请重新输入!\n");
exit(-1);
}
else
return(b/a);
}
}
}
void main()
{
InitStackNum();
InitStackOP();
PushOPTR('#');
printf("请输入表达式,以\"#\"结尾.\n");
char ch;
ch = getchar();
while(ch!='#' || GetTopOP()!='#')
{
int sum=0;
while(IsOP(ch)==0)//是操作数
{
if(ch=='#') break;
sum=sum*10+ch - '0';
ch=getchar();
if(IsOP(ch)!=0)
{
PushOPND(sum);
}
}
switch(CompareOP(ch))
{
case '':
{
PushOPTR(ch);
ch=getchar();
break;
}
case '=':
{
PopOPTR();
ch=getchar();
break;
}
case '':
{
PushOPND(Operate(PopOPTR()));
//ch=getchar();
break;
}
}// switch
printf("所求结果是: %d\n",GetTopNum());
free(nbase);
free(obase);
}
请问C语言如何创建二叉树????
创建二叉树的源程序如下:
#include cstdlib
#include stdio.h
typedef struct node
{ //树的结点
int data;
struct node* left;
struct node* right;
} Node;
typedef struct
{ //树根
Node* root;
} Tree;
void insert(Tree* tree, int value)//创建树
{
Node* node=(Node*)malloc(sizeof(Node));//创建一个节点
node-data = value;
node-left = NULL;
node-right = NULL;
if (tree-root == NULL)//判断树是不是空树
{
tree-root = node;
}
else
{//不是空树
Node* temp = tree-root;//从树根开始
while (temp != NULL)
{
if (value temp-data)//小于就进左儿子
{
if (temp-left == NULL)
{
temp-left = node;
return;
}
else
{//继续判断
temp = temp-left;
}
}
else {//否则进右儿子
if (temp-right == NULL)
{
temp-right = node;
return;
}
else {//继续判断
temp = temp-right;
}
}
}
}
return;
}
void inorder(Node* node)//树的中序遍历
{
if (node != NULL)
{
inorder(node-left);
printf("%d ",node-data);
inorder(node-right);
}
}
int main()
{
Tree tree;
tree.root = NULL;//创建一个空树
int n;
scanf("%d",n);
for (int i = 0; i n; i++)//输入n个数并创建这个树
{
int temp;
scanf("%d",temp);
insert(tree, temp);
}
inorder(tree.root);//中序遍历
getchar();
getchar();
return 0;
}
扩展资料:
简单二叉树定义范例:此树的顺序结构为:ABCDE
#include cstdlib
#include stdio.h
#include string
int main()
{
node* p = newnode;
node* p = head;
head = p;
string str;
cin str;
creat(p, str, 0)//默认根结点在str下标0的位置
return 0;
}
//p为树的根结点(已开辟动态内存),str为二叉树的顺序存储数组ABCD##E或其他顺序存储数组,r当前结点所在顺序存储数组位置
void creat(node* p, string str, int r)
{
p-data = str[r];
if (str[r * 2 + 1] == '#' || r * 2 + 1 str.size() - 1)p-lch = NULL;
else
{
p-lch = newnode;
creat(p-lch, str, r * 2 + 1);
}
if (str[r * 2 + 2] == '#' || r * 2 + 2 str.size() - 1)p-rch = NULL;
else
{
p-rch = newnode;
creat(p-rch, str, r * 2 + 2);
}
}
关于创建二叉树的C语言 为什么void Creat_Bintree(Bintree *root)非要定义一个带指针的?
目前在Android手机上,还没有统一的获取
ROOT的方法,各个机型在获取ROOT权限
时的操作要点也不尽相同。目前主流的一键
ROOT软件有
Z4ROOT,UniversalAndroot,visionaryplus,GingerBreak
等,到网上搜索下载这些软件后安装,按照
提示操作就可以了。
以下是比较常见的一种方法:
1.下载upd-1.zip压缩文件(到网上找),
不需要解压,放入sd卡中。
2.关机,同时按住"home+开机键"开机。
3.出现蓝色的英文字母,用音量键选择到第
二个(apply update from sdcard),按
home键确认。在sd卡的目录中找到你刚才
放入的upd-1.zip并按home键。
4.稍等会回到原来的界面,选择第一个
(reboot system now),按一下home
键。
5.重启后,root就成功了。
希望这些对你有帮助。
不管怎么刷机都是有风险的,当然选择是你
自己做出的所以后果也是自负。
root后手机拥有更大权限,可以装一些需要
高权限的软件,也可以删除一些系统没用的
软件,更可以app2SD,释放出手机自带的
那点可怜的存储,让手机运行速度更快。
豌豆荚这个软件还不错,但它是一款在电脑
上运行的软件,所以打开你的电脑连上数据
线吧!
如果对你有帮助希望不吝给分,谢谢!
二叉树的建立与遍历(C语言)
楼主你好~~~“ф”字符的源代码我忘记了,我这里有一个自己写过的遍历算法
#includeiostream.h
typedef struct btnode
{
char data;
struct btnode *Lchild,*Rchild;
}*bitreptr;
void Create(bitreptr p)
{
char n;
p=new btnode;
cinn;
if(n!='#')
{
p-data=n;
Create(p-Lchild);
Create(p-Rchild);
}
else
p=NULL;
}
void preorder(bitreptr p)
{
if(p)
{
coutp-data" ";
preorder(p-Lchild);
preorder(p-Rchild);
}
}
void midorder(bitreptr p)
{
if(p)
{
midorder(p-Lchild);
coutp-data" ";
midorder(p-Rchild);
}
}
void postorder(bitreptr p)
{
if(p)
{
postorder(p-Lchild);
postorder(p-Rchild);
coutp-data" ";
}
}
void change(bitreptr p)
{
bitreptr t,q;
if(p)
{
t=p-Lchild;
q=p-Rchild;
p-Lchild=q;
p-Rchild=t;
change(p-Lchild);
change(p-Rchild);
}
}
void main()
{
char i;
cout"请选择所需功能('A'输出该二叉树序列,'B'输出交换后二叉树序列)"endl;
cini;
bitreptr p;
cout"输入数据:";
Create(p);
switch(i)
{
case 'A':
{
cout"前序:";
preorder(p);
coutendl;
cout"中序:";
midorder(p);
coutendl;
cout"后序:";
postorder(p);
coutendl;
}break;
case 'B':
{
change(p);
cout"交换二叉树前序:";
preorder(p);
coutendl;
cout"交换二叉树中序:";
midorder(p);
coutendl;
cout"交换二叉树后序:";
postorder(p);
coutendl;
}break;
}
}
这个算法输入时要以“#”代表空节点,及将[测试数据] “ABCффDEфGффFффф”改成“ABC##DE#G##F###”即可。另外我的算法包括了二叉树左右子树交换的代码“change(bitreptr p)”,只要楼主稍作修改就可以得到你想要的完美结果~
关于c语言创建一棵树函数和c语言创建一颗二叉树的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。