方式一:控制台输入,递归方式。
代码:
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));
}
}
测试:
代码:
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