请问用C语言怎么样编写二叉树交换左右子树?

用C语言程序怎么实现

#include<stdio.h>#defineQUEUE_MAX_SIZE20#defineSTACK_MAX_SIZE10  typedefintelemType;#include"BT.c"  /************************************************************************/  /*          以下是关于二叉搜索树操作的4个简单算法       */  /************************************************************************/  /*1.查找*/  /*递归算法*/  elemType*findBSTree1(structBTreeNode*bst,elemTypex)  {  /*树为空则返回NULL*/  if(bst==NULL){  returnNULL;  }else{  if(x==bst->data){  return&(bst->data);  }else{  if(x<bst->data){  /*向左子树查找并直接返回*/  returnfindBSTree1(bst->left,x);  }else{    /*向右子树查找并直接返回*/  returnfindBSTree1(bst->right,x);  }  }  }  }  /*非递归算法*/  elemType*findBSTree2(structBTreeNode*bst,elemTypex)  {  while(bst!=NULL){  if(x==bst->data){  return&(bst->data);  }elseif(x<bst->data){  bst=bst->left;  }else{  bst=bst->right;  }  }  returnNULL;  }  /*2.插入*/  /*递归算法*/  voidinsertBSTree1(structBTreeNode**bst,elemTypex)  {  /*新建一个根结点*/  if(*bst==NULL){  structBTreeNode*p=(structBTreeNode*)malloc(sizeof(structBTreeNode));  p->data=x;  p->left=p->right=NULL;  *bst=p;  return;  }elseif(x<(*bst)->data){    /*向左子树完成插入运算*/  insertBSTree1(&((*bst)->left),x);  }else{    /*向右子树完成插入运算*/  insertBSTree1(&((*bst)->right),x);  }  }  /*非递归算法*/  voidinsertBSTree2(structBTreeNode**bst,elemTypex)  {  structBTreeNode*p;  structBTreeNode*t=*bst,*parent=NULL;  /*为待插入的元素查找插入位置*/  while(t!=NULL){  parent=t;  if(x<t->data){  t=t->left;  }else{  t=t->right;  }  }  /*建立值为x,左右指针域为空的新结点*/  p=(structBTreeNode*)malloc(sizeof(structBTreeNode));  p->data=x;  p->left=p->right=NULL;  /*将新结点链接到指针为空的位置*/  if(parent==NULL){  *bst=p;    /*作为根结点插入*/  }elseif(x<parent->data){    /*链接到左指针域*/  parent->left=p;  }else{  parent->right=p;  }  return;  }  /*3.建立*/  voidcreateBSTree(structBTreeNode**bst,elemTypea[],intn)  {  inti;  *bst=NULL;  for(i=0;i<n;i++){  insertBSTree1(bst,a[i]);  }  return;  }
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-07
void exchange(Btree &rt){//二叉树每个节点互换左右子树
Btree *t=NULL;
if(rt->lchild==NULL&&rt->rchild==NULL)
return;//若树没左右子树,返回
else
{temp=rt->lchild;<br/> rt->lchild=rt->rchild;<br/> rt->rchild=temp;}
if(rt->lchild)
exchange(rt->lchild);//递归交换左子树的子树
if(rt->rchild)
exchange(rt->rchild;//递归交换右子树的子树
}

你是学数据结构的?
第2个回答  2013-11-07
你加个main函数不就行了么 老师看的也只是算法哦

交换二叉树的所有节点的左右子树算法(C语言)
二叉树最好使用递归的算法,假设二叉树节点定义如下:typedef struct node{ int a;node* left;node* right;};可以定义交换左右子树的函数如下:void changeleaf(node* anode){ if(anode!=0){ node* tnode=anode->left;anode->left=anode->right;anode->right=tnode;changeleaf(anode->left);cha...

...试写出算法(C函数):将所有结点的左右子树互换。
(6)CRT_BT(x,LBT,RBT) 建树操作。生成一棵以结点 x为根,二叉树 LBT和 RBT分别为左, 右子树的二叉树。(7)INS_LCHILD(BT,y,x) 和 INS_RCHILD(BT,x) 插入子树操作。将以结点 x为根且右子树为空的二叉树 分别置为二叉树 BT中结点 y的左子树和右子树。若结点 y有左子树 \/右子树,则...

写一个算法,交换一棵二叉树T的左右子树,要求使左子树根结点的关键字k小...
void swap(BT root){ if(root){ if(root.l&&root.r&&(*root.l).key>(*root.r).key){ BT p=(*root).l;(*root).l=(*root).r;(*root).r=p;} swap((*root).l);swap((*root).r);} }

请问C语言如何创建二叉树???
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个数...

c语言二叉树问题,勿写代码,求详细思考过程
中序遍历:若树不空,则先访问左子树,再访问根,再访问右子树。从后序遍历:CDABE得出E是最顶根节点。然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。再分析后序遍历CDA可以知道A是CD的根,而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)最后,先序遍历:若树...

数据结构中关于用c++语言建立二叉树的问题,求代码,急!!!
CreateBiTree(&((*bt)->RChild)); \/\/生成右子树 } } 程序如下:(1)include "bitree.h"void preOrder(BiTree root)\/*先序遍历二叉树, root为指向二叉树根结点的指针*\/ { if (root!=NULL){ printf("%c",root->data); \/*输出结点*\/ preOrder(root ->LChild);\/*先序遍历左...

数据结构二叉树的基本操作~~~
createBiTree(T->lchild); \/\/生成左子树 createBiTree(T->rchild); \/\/生成右子树 }\/\/else return OK;}\/\/createBiTree int PreOrderTraverse(BiTree T){ \/\/先序遍历二叉树的递归算法 if(T){ printf("%c",T->data); \/\/访问根结点 PreOrderTraverse(T->lchild);PreOrderTrave...

求数据结构树与二叉树转换C语言代码
(A(B(E(K,L),F),C(G),D(H(M),I,J)))5. 2 二叉树 1.二叉树的基本形态:二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:(1)空二叉树——(a);(2)只有一个根结点的二叉树——(b);(3)右子树为空的二叉树——(c);(4)左子树为空的二叉树——(d...

请大神用C语言帮编一个关于家谱的程序!要求:
\/\/生成根结点 CreateBiTree(T->lchild);\/\/构造左子树 CreateBiTree(T->rchild);\/\/构造右子树 } return OK;}\/\/CreateBiTree void PreOrder(BiTree T)\/\/采用二叉链表存储结构,先序遍历二叉树T,对每个结点的访问就是输出它的值 { if(T){ printf("%c",T->data);...

怎么把二叉树分解成根和左右子树三部分
void sepTree(TreeNode *root, TreeNode **pLeft, TreeNode **pRight){ pLeft = root->left;pRight = root->right;root->left = NULL;root->right = NULL;}

相似回答