三种创建二叉树的方式

来源:互联网 发布:数据透视分析表怎么用 编辑:程序博客网 时间:2024/06/08 04:35

方式一:控制台输入,递归方式。

代码:

void BuildBinTree(BinTree *T){char item;cin>>item;if(item=='#'){*T = NULL;}else {*T = new BinTreeNode;(*T)->data = item; BuildBinTree(&((*T)->lchild));BuildBinTree(&((*T)->rchild));}}
方式二:从数组参数创建。递归方式。见文章《二叉树的常见问题及其解决程序》。
代码:

void buildBinTreeFromArray(int a[],int left,int right,BinTree *T){if(left<=right){int mid = left + right >> 1;*T = new BinTreeNode;(*T)->data = a[mid];(*T)->lchild = (*T)->rchild = NULL;buildBinTreeFromArray(a,left,mid-1,&((*T)->lchild));buildBinTreeFromArray(a,mid+1,right,&((*T)->rchild));}}

测试:


方式三:字符串参数,格式A(B(D,E),C(,F))。非递归方式。见文章《二叉树的建立、销毁、各种遍历(递归、非递归)》

代码:

void buildBinTree(BinTree *T,char *str){stack<BinTree> s;*T = NULL;BinTree p,t;p = t = NULL;int i,k;i = 0;while(str[i]){switch(str[i]){case '(': s.push(p); k = 1; break;case ')': t = s.top(); s.pop(); break;case ',': k = 2; break;default:p = new BinTreeNode;p->data = str[i];p->lchild = p->rchild = NULL;if (*T == NULL){*T = p;}else if (k == 1){t = s.top();t->lchild = p;}else {t = s.top();t->rchild = p;}}i++;}}


REF:

1,http://blog.csdn.net/luxiaoxun/article/details/7536992

2,http://blog.csdn.net/randyjiawenjie/article/details/6772145

0 0