2024年10月二叉树c语言实现完整代码(请问C语言如何创建二叉树)

 更新时间:2024-10-12

  ⑴二叉树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?;}

您可能感兴趣的文章:

相关文章