二叉树的建立方法,你都懂吗?

来源:互联网 发布:40本网络禁书txt百度云 编辑:程序博客网 时间:2024/05/10 05:46

                                      二叉树的建立方法,你都懂吗?

   二叉树是很简单,但是你真的会所有的建树方法吗?这里将会给你提供7种建树方法。

   第一种:就是只利用先序建树,递归建树(但是先序必须是完整的,用#表示NULL)

   第二种:利用先序传引用建树。

   第三种:利用先序和二级指针建树。

   第四种:给定某一个节点(这个节点是引用传进去)左右孩子。

   第五种:给定某一个节点(这个节点是指针传进去)左右孩子。

   第六种:用先序和中序建树

   第七种:用中序和后序建树。

这里有基本的二叉树的操作:http://blog.csdn.net/qq_35256722/article/details/69111333

下面只是简单的代码:

   第一种:

//创建一个二叉树//只给一个先序和NULL来建立一个二叉树BtNode *Createtree(){BtNode *p = NULL;Elemtype x;cin>>x;if(x != '#'){p = BuyNode();p->data = x;p->leftchild = Createtree();p->rightchild = Createtree();}return p;}
  第二种:

//传引用建树BtNode *Createtree1(char *&str){     BtNode *p = NULL; if( str != NULL && *str != '#') { p = BuyNode(); p->data = *str; p->leftchild = Createtree1(++str); p->rightchild = Createtree1(++str); } return p; }

第三种:

//引用转换成二级指针建树BtNode *Createtree2(char ** const str){BtNode *p = NULL;if( str != NULL  && *str != NULL && **str != '#'){p = BuyNode();p->data = **str;p->leftchild = Createtree1(++*str);p->rightchild = Createtree1(++*str);}return p;}
第四种

//给一个结点建立左右孩子void Createtree3(BtNode *&p,char *&str){if(  str != NULL && *str != '#'){p = BuyNode();p->data = *str;Createtree3(p->leftchild,++str);Createtree3(p->rightchild,++str);}}

第五种:

//利用指针void Createtree4(BtNode ** const p,char *&str){if(  str != NULL && *str != '#'){(*p) = BuyNode();(*p)->data = *str;Createtree4(&(*p)->leftchild,++str);Createtree4(&(*p)->rightchild,++str);}}
第六种:

int Findvalue(char *is,Elemtype p,int n){     for(int i = 0;i < n;++i) { if(is[i] == p) return i; } return -1;}//根据前序和中序建立一个二叉树BtNode *CreatePM(char *pr,char *is,int n){ Elemtype p = pr[0]; BtNode *tmp = NULL;     if(n > 0) { int m = Findvalue(is,p,n); if(-1 == m) exit(1); tmp  = BuyNode(); tmp->data = p; tmp->leftchild = CreatePM(pr+1,is,m); tmp->rightchild = CreatePM(pr+m+1,is+m+1,n-m-1); } return tmp;}
BtNode *CreatetreePM(char *pr,char *is,int n){  if(pr == NULL || is == NULL || n < 1) return NULL;  return  CreatePM(pr,is,n);  }


第七种:

BtNode *CreateML(char *mi,char *la,int n){Elemtype p = la[n-1];BtNode *tmp = NULL;if(n > 0){int m = Findvalue(mi,p,n);if(-1 == m) exit(1);tmp  = BuyNode();tmp->data = p;tmp->leftchild = CreateML(mi,la,m);tmp->rightchild = CreateML(mi+m+1,la+m,n-m-1);}return tmp;}BtNode *CreatetreeML(char *mi,char *la,int n){if(mi == NULL || la == NULL || n < 1) return NULL;return  CreateML(mi,la,n);}
期待更多的方法。






0 0
原创粉丝点击