二叉树的建立方法,你都懂吗?
来源:互联网 发布: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
- 二叉树的建立方法,你都懂吗?
- 二叉树的建立与遍历方法
- 二叉树的建立(多种方法)
- 二叉树的建立与遍历方法
- 使用扩展二叉树的方法建立二叉树
- 各种方法建立二叉树
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 【二叉树的建立】
- 二叉树的建立
- 二叉树的建立
- 频道管理
- java基础4:Java运算、控制语句
- 实用工具--ubuntu14.04万能视频播放器
- oracle语句in包含null
- 内存溢出和内存泄漏的区别
- 二叉树的建立方法,你都懂吗?
- 关于DOM的操作以及性能优化问题-重绘重排
- WKWebView与js交互之完美解决方案
- 【剑指offer】二分查找二维数组
- 如何向链表中读入数据
- LeetCode-Easy部分中标签为Math 231. Power of Two
- <C/C++算法>九度OJ题目1151--1200解题练习(五)
- 【剑指offer】两个栈实现一个队列
- 一个问题