2024年10月二叉树c语言实现完整代码(请问C语言如何创建二叉树)
⑴二叉树c语言实现完整代码(请问C语言如何创建二叉树
⑵请问C语言如何创建二叉树
⑶创建二叉树的源程序如下:
⑷#include《cstdlib》
⑸#include《stdio.h》
⑹typedefstructnode
⑺structnode*left;
⑻structnode*right;
⑼typedefstruct
⑽Node*root;
⑾voidinsert(Tree*tree,intvalue)//创建树
⑿Node*node=(Node*)malloc(sizeof(Node));//创建一个节点
⒀node-》data=value;
⒁node-》left=NULL;
⒂node-》right=NULL;
⒃if(tree-》root==NULL)//判断树是不是空树
⒄tree-》root=node;
⒅Node*temp=tree-》root;//从树根开始
⒆while(temp!=NULL)
⒇if(value《temp-》data)//小于就进左儿子
⒈if(temp-》left==NULL)
⒉temp-》left=node;
⒊temp=temp-》left;
⒋else{//否则进右儿子
⒌if(temp-》right==NULL)
⒍temp-》right=node;
⒎else{//继续判断
⒏temp=temp-》right;
⒐voidinorder(Node*node)//树的中序遍历
⒑if(node!=NULL)
⒒inorder(node-》left);
⒓printf(“%d“,node-》data);
⒔inorder(node-》right);
⒕tree.root=NULL;//创建一个空树
⒖scanf(“%d“,&n);
⒗for(inti=;i《n;i++)//输入n个数并创建这个树
⒘scanf(“%d“,&temp);
⒙insert(&tree,temp);
⒚inorder(tree.root);//中序遍历
⒛getchar();
getchar();
简单二叉树定义范例:此树的顺序结构为:ABCDE
#include《cstdlib》
#include《stdio.h》
#include《string》
node*p=newnode;
node*p=head;
stringstr;
creat(p,str,)//默认根结点在str下标的位置
//p为树的根结点(已开辟动态内存,str为二叉树的顺序存储数组ABCD##E或其他顺序存储数组,r当前结点所在顺序存储数组位置
voidcreat(node*p,stringstr,intr)
p-》data=str;
if(str==’#’||r*+》str.size()-)p-》lch=NULL;
p-》lch=newnode;
creat(p-》lch,str,r*+);
if(str==’#’||r*+》str.size()-)p-》rch=NULL;
p-》rch=newnode;
creat(p-》rch,str,r*+);
#include《iostream.h》#include《stdio.h》#include《stdlib.h》typedefstructnode{chardata;structnode*lchild,*rchild;//}BiTNode,*BiTree;voidCreatBiTree(BiTree&T){charch;ch=getchar();if(ch==’’)T=;else{T=(BiTNode*)malloc(sizeof(BiTNode));T-》data=ch;//生成根节点CreatBiTree(T-》lchild);//构造左子树CreatBiTree(T-》rchild);//构造右子树}}voidpreorder(BiTreeT)//前序遍历{if(T!=NULL){printf(“%c“,T-》data);preorder(T-》lchild);preorder(T-》rchild);}}voidinorder(BiTreeT)//中序遍历{if(T!=NULL){inorder(T-》lchild);printf(“%c“,T-》data);inorder(T-》rchild);}}voidpostorder(BiTreeT)//后序遍历{if(T!=NULL){postorder(T-》lchild);postorder(T-》rchild);printf(“%c“,T-》data);}}voidmain(){cout《《“请输入要创建的二叉树包括空格:“《《endl;BiTreeT;CreatBiTree(T);//创建二叉树cout《《“前序遍历的结果为:“《《endl;preorder(T);cout《《endl;cout《《“中序遍历的结果为:“《《endl;inorder(T);cout《《endl;cout《《“后序遍历的结果为:“《《endl;postorder(T);}
C语言二叉树遍历代码
t=malloc(sizeof(tree));.t-》rchild=createTree();.voidqianxu(tree*t).zhongxu(t-》lchild);//再读左子树printf(“%c“,t-》data);//先读根结点zhongxu(t-》rchild);//再读右子树.houxu(t-》lchild);//再读左子树houxu(t-》rchild);//再读右子树printf(“%c“,t-》data);//先读根结点.return;.n=count(t-》lchild)+count(t-》rchild)+;.t-》data=t-》data;.returnt;.returnm+;PS:注意有些语句结尾是没有分号的
数据结构二叉树的程序,用c语言怎么实现
您好,想要实现一个二叉树,需要用到结构体来存储每个节点的信息,并使用指针来存储每个节点的左右子节点的地址。具体的实现方法可以参考下面的代码示例:
#include《stdio.h》
#include《stdlib.h》
structTreeNode{
structTreeNode*left;
structTreeNode*right;
structTreeNode*createNode(intval){
structTreeNode*node=(structTreeNode*)malloc(sizeof(structTreeNode));
node-》val=val;
node-》left=NULL;
node-》right=NULL;
returnnode;
voidinsertNode(structTreeNode*root,intval){
if(root==NULL){
if(val《root-》val){
if(root-》left==NULL){
root-》left=createNode(val);
insertNode(root-》left,val);
if(root-》right==NULL){
root-》right=createNode(val);
insertNode(root-》right,val);
voidprintTree(structTreeNode*root){
if(root==NULL){
printf(“%d
“,root-》val);
printTree(root-》left);
printTree(root-》right);
intmain(){
structTreeNode*root=createNode();
insertNode(root,);
insertNode(root,);
insertNode(root,);
insertNode(root,);
insertNode(root,);
insertNode(root,);
printTree(root);
在这段代码中,我们定义了一个结构体TreeNode来表示二叉树的每个节点,结构体中包含了一个节点的数值val,以及指向左子节点和右子节点的指针left和right。
求c语言数据结构二叉树的建树,前序遍历,输出树的代码,能用采纳
#include#include#defineMAXSIZE//二叉树中最多的结点数typedefcharTElemType;typedefstructBiTNode{TElemTypedata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;//定义函数指针typedefvoid(*Visit)(BiTree);//二叉树的初始化voidInit_BiTree(BiTree*T){*T=NULL;}//判断二叉树是否为空,返回intIsEmpty_BiTree(BiTree*T){return*T==NULL;}//创建二叉树voidCreate_BiTree(BiTree*T){charch;ch=getchar();//当输入的是“#“时,认为该子树为空if(ch==’#’)*T=NULL;//创建树结点else{*T=(BiTree)malloc(sizeof(BiTNode));(*T)-》data=ch;//生成树结点//生成左子树Create_BiTree(&(*T)-》lchild);//生成右子树Create_BiTree(&(*T)-》rchild);}}//输出结点的值voidPrint_BiTreeNode(BiTreeT){printf(“%c “,T-》data);}//先序遍历二叉树voidPreOrder_BiTree(BiTreeT,Visitvisit){if(!IsEmpty_BiTree(&T)){visit(T);PreOrder_BiTree(T-》lchild,visit);PreOrder_BiTree(T-》rchild,visit);}}intmain(){BiTreeT;//将二叉树初始为一个空的二叉树Init_BiTree(&T);//创建二叉树Create_BiTree(&T);//先序遍历printf(“
先序遍历结果:“);PreOrder_BiTree(T,Print_BiTreeNode);return;}
用c语言写二叉树,源代码
二叉树是采用递归定义的,实现起来代码简洁(也许并不简单。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。以下代码在Win-Tc..下编译通过。#include《stdio.h》#defineElemTypechar//节点声明,数据域、左孩子指针、右孩子指针typedefstructBiTNode{chardata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;//先序建立二叉树BiTreeCreateBiTree(){charch;BiTreeT;scanf(“%c“,&ch);if(ch==’#’)T=NULL;else{T=(BiTree)malloc(sizeof(BiTNode));T-》data=ch;T-》lchild=CreateBiTree();T-》rchild=CreateBiTree();}returnT;//返回根节点}//先序遍历二叉树voidPreOrderTraverse(BiTreeT){if(T){printf(“%c“,T-》data);PreOrderTraverse(T-》lchild);PreOrderTraverse(T-》rchild);}}//中序遍历voidInOrderTraverse(BiTreeT){if(T){PreOrderTraverse(T-》lchild);printf(“%c“,T-》data);PreOrderTraverse(T-》rchild);}}//后序遍历voidPostOrderTraverse(BiTreeT){if(T){PreOrderTraverse(T-》lchild);PreOrderTraverse(T-》rchild);printf(“%c“,T-》data);}}voidmain(){BiTreeT;T=CreateBiTree();//建立PreOrderTraverse(T);//输出getch();}
求数据结构(C语言版建立二叉树的代码~~急~~谢谢了
BT.H文件#include《stdio.h》#include《malloc.h》#include《conio.h》#defiRUE#defineFALSE#defineERROR#defineOK#defineStack_Size#defineNUM#defineMAXSIZE//队列的最大长度//定义二叉树typedefcharDataType;typedefstructNode{DataTypedata;structNode*LChild;structNode*RChild;}BiTNode,*BiTree;//定义stacktypedefBiTreeStackElementType;typedefstruct{StackElementTypeelem;inttop;}SeqStack;//定义队列typedefBiTreeQueueElementType;typedefstruct{QueueElementTypeelement;intfront;intrear;}SeqQueue;//队列的抽象voidInitQueue(SeqQueue*Q){Q-》front=Q-》rear=;}intEnterQueue(SeqQueue*Q,QueueElementTypex){if((Q-》rear+)%MAXSIZE==Q-》front)return(FALSE);Q-》element=x;Q-》rear=(Q-》rear+)%MAXSIZE;return(TRUE);}
完整正确的C语言二叉树程序
我有现成的,分享给大家了。#include《stdio.h》#include《stdlib.h》#definemaxsizetypedefstructbtnode{intdata;//结点数据类型structbtnode*lchild,*rchild;//定义左、右孩子为指针型}bitree;bitree*creat(bitree*t)//创建二叉树{bitree*s,*p,*q;intx;scanf(“%d“,&x);while(x!=){s=(bitree*)malloc(sizeof(bitree));s-》data=x;s-》lchild=s-》rchild=NULL;if(t==NULL)t=s;else{p=t;while(p){q=p;if(s-》data《p-》data)p=p-》lchild;elsep=p-》rchild;}if(s-》data《q-》data)q-》lchild=s;elseq-》rchild=s;}scanf(“%d“,&x);}return(t);}bitree*insert(bitree*t)//插入结点{bitree*s,*p,*q;intx;scanf(“%d“,&x);while(x!=){s=(bitree*)malloc(sizeof(bitree));s-》data=x;s-》lchild=s-》rchild=NULL;if(t==NULL)t=s;else{p=t;while(p){q=p;if(s-》data《p-》data)p=p-》lchild;elsep=p-》rchild;}if(s-》data《q-》data)q-》lchild=s;elseq-》rchild=s;}scanf(“%d“,&x);}return(t);}voidsearch(bitree*t,intk)//查找数据{intflag=;while(t!=NULL){if(t-》data==k){printf(“已查到要找的数!
“);flag=;break;}elseif(t-》data《k)t=t-》rchild;elset=t-》lchild;}if(flag!=)printf(“没有找到要查找的数据!
“);}bitree*dele(bitree*t,intk)//删除数据{intflag;bitree*p,*q,*s=NULL,*f;f=t;while(t!=NULL)//查找数据{if(t-》data==k){printf(“已找到所查找的数!
“);break;}elseif(t-》data《k){p=t;t=t-》rchild;flag=;}else{p=t;t=t-》lchild;flag=;}}if(t-》lchild==NULL&&t-》rchild==NULL)//删除叶子结点{free(t);if(flag==)p-》rchild=NULL;elsep-》lchild=NULL;}else{if(t-》lchild==NULL&&t-》rchild!=NULL)//删除只有右子树的结点{if(flag==)p-》rchild=t-》rchild;elsep-》lchild=t-》rchild;free(t);}else{if(t-》lchild!=NULL&&t-》rchild==NULL)//删除只有左子树的结点{if(flag==)p-》rchild=t-》lchild;elsep-》lchild=t-》lchild;free(t);}else//删除左右子树都有的结点{p=t;t=t-》lchild;q=t;while(t-》rchild){q=t;t=t-》rchild;}if(t==q){p-》data=t-》data;p-》lchild=t-》lchild;free(t);}else{p-》data=t-》data;q-》rchild=t-》lchild;free(t);}}}}return(f);}voidoutput(bitree*t)//实现二叉树的遍历{bitree*q,*p;intf,r;q=t;f=r=;while(f《=r){p=q;f++;printf(“%d“,p-》data);if(p-》lchild!=NULL){r++;q=p-》lchild;}if(p-》rchild!=NULL){r++;q=p-》rchild;}}}voidmain(){bitree*q=NULL,*r;intm,n,x=;while(x==){system(“cls“);printf(“********************************
“);printf(“创建请按
“);printf(“插入请按
“);printf(“查找请按
“);printf(“删除请按
“);printf(“显示请按
“);printf(“退出请按
“);printf(“********************************
“);scanf(“%d“,&m);switch(m){case:printf(“请输入数据并以’’结束
“);r=creat(q);system(“pause“);break;case:printf(“请输入数据并以’’结束
“);r=insert(r);break;case:printf(“请输入要查找的数:“);scanf(“%d“,&n);search(r,n);system(“pause“);break;case:printf(“请输入要删除的数:“);scanf(“%d“,&n);r=dele(r,n);printf(“已删除输入数据!
“);system(“pause“);break;case:output(r);system(“pause“);printf(“
“);break;case:x=;break;}}}
用程序完成完整的二叉树结构的实现及测试(C语言
源文件:#include《iostream.h》#include《stdlib.h》#include“BinaryTree.h“template《classT》BinTreeNode《T》*BinaryTree《T》::Parent(BinTreeNode《T》*subTree,BinTreeNode《T》*t){//私有函数:从结点subTree开始,搜索结点t的双//亲,若找到则返回双亲结点地址,否则返回NULLif(subTree==NULL)returnNULL;if(subTree-》leftChild==t||subTree-》rightChild==t)returnsubTree;//找到,返回父结点地址BinTreeNode《T》*p;if((p=Parent(subTree-》leftChild,t))!=NULL)returnp;//递归在左子树中搜索elsereturnParent(subTree-》rightChild,t);//递归在左子树中搜索};template《classT》voidBinaryTree《T》::Destroy(BinTreeNode《T》*subTree){//私有函数:删除根为subTree的子树if(subTree!=NULL){Destroy(subTree-》leftChild);//删除左子树Destroy(subTree-》rightChild);//删除右子树deletesubTree;//删除根结点}};template《classT》voidBinaryTree《T》::InOrder(BinTreeNode《T》*subTree){if(subTree!=NULL){InOrder(subTree-》leftChild);//遍历左子树cout《《subTree-》data《《“|“;//访问根结点InOrder(subTree-》rightChild);//遍历右子树}};template《classT》voidBinaryTree《T》::PreOrder(BinTreeNode《T》*subTree){if(subTree!=NULL){cout《《subTree-》data《《“|“;//访问根结点PreOrder(subTree-》leftChild);//遍历左子树PreOrder(subTree-》rightChild);//遍历右子树}};template《classT》voidBinaryTree《T》::PostOrder(BinTreeNode《T》*subTree){if(subTree!=NULL){PostOrder(subTree-》leftChild);//遍历左子树PostOrder(subTree-》rightChild);//遍历右子树cout《《subTree-》data《《“|“;//访问根结点}};template《classT》intBinaryTree《T》::Size(BinTreeNode《T》*subTree){//私有函数:利用二叉树后序遍历算法计算二叉//树的结点个数if(subTree==NULL)return;//空树elsereturn+Size(subTree-》leftChild)+Size(subTree-》rightChild);};template《classT》intBinaryTree《T》::Height(BinTreeNode《T》*subTree){//私有函数:利用二叉树后序遍历算法计算二叉//树的高度或深度if(subTree==NULL)return;//空树高度为else{inti=Height(subTree-》leftChild);intj=Height(subTree-》rightChild);return(i《j)?j+:i+;}};template《classT》voidBinaryTree《T》::CreateBinTree(TRefValue,BinTreeNode《T》*&subTree){//前序序列从键盘输入建立二叉树。Titem;cin》》item;//读入根结点的值if(item!=RefValue){subTree=newBinTreeNode《T》(item);//建立根结点if(subTree==NULL){cerr《《“存储分配错!“《《endl;exit();}CreateBinTree(RefValue,subTree-》leftChild);//递归建立左子树CreateBinTree(RefValue,subTree-》rightChild);//递归建立右子树}elsesubTree=NULL;//封闭指向空子树的指针};头文件:#pragmaoncetemplate《classT》structBinTreeNode{//二叉树结点类定义Tdata;//数据域BinTreeNode《T》*leftChild,*rightChild;//左子女、右子女链域BinTreeNode()//构造函数{leftChild=NULL;rightChild=NULL;}BinTreeNode(Tx,BinTreeNode《T》*l=NULL,BinTreeNode《T》*r=NULL){data=x;leftChild=l;rightChild=r;}};template《classT》classBinaryTree{//二叉树类定义protected:BinTreeNode《T》*root;//二叉树的根指针TRefValue;//数据输入停止标志voidDestroy(BinTreeNode《T》*subTree);//删除intHeight(BinTreeNode《T》*subTree);//返回树高度intSize(BinTreeNode《T》*subTree);//返回结点数BinTreeNode《T》*Parent(BinTreeNode《T》*subTree,BinTreeNode《T》*t);//返回父结点voidPreOrder(BinTreeNode《T》*subTree);//前序遍历voidInOrder(BinTreeNode《T》*subTree);//中序遍历voidPostOrder(BinTreeNode《T》*subTree);//后序遍历voidCreateBinTree(TRefValue,BinTreeNode《T》*&subTree);//从键盘读入建树public:BinaryTree():root(NULL){}//构造函数BinaryTree(Tvalue):RefValue(value),root(NULL){}//构造函数~BinaryTree(){Destroy(root);}//析构函数boolIsEmpty(){returnroot==NULL;}//判二叉树空否intHeight(){returnHeight(root);}//求树高度intSize(){returnSize(root);}//求结点数BinTreeNode《T》*Parent(BinTreeNode《T》*t){return(root==NULL||root==t)?NULL:Parent(root,t);}//返回双亲结点BinTreeNode《T》*LeftChild(BinTreeNode《T》*t){return(t!=NULL)?t-》leftChild:NULL;}//返回左子女BinTreeNode《T》*RightChild(BinTreeNode《T》*t){return(t!=NULL)?t-》rightChild:NULL;}//返回右子女BinTreeNode《T》*GetRoot()const{returnroot;}//取根voidPreOrder(){PreOrder(root);}//前序遍历voidInOrder(){InOrder(root);}//中序遍历voidPostOrder(){PostOrder(root);}//后序遍历voidCreateBinTree(){CreateBinTree(RefValue,root);}//从键盘读入建树};
以前序遍历的顺序到中序遍历中查找,会把树分成两个子树,递归处理左和右子树,直到只有单
结点时,输出这个结点。
#include?《stdio.h》/*?快速查找*/int?find_mid;char*?post(char*?pre,?int?f,?int?t)?{????char?root?=?*pre;????int?i?=?find_mid;????if?(f?《?i)?pre?=?post(pre?+?,?f,?i);????if?(i?+??《?t)?pre?=?post(pre?+?,?i?+?,?t);????putchar(root);????return?pre;}int?main()?{????char?pre?=?{};????char?mid;????int?i;????while?(scanf(“%s?%s“,?pre,?mid)?》?){????????for?(i?=?;?mid;?++i)?{????????????find_mid?=?i;????????}????????post(pre,?,?i);????????putchar(’
’);????}????return?;}