typedef struct BitNode
{
char value;
BitNode *lchild,*rchild;
}BitNode,*BiTree;
void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2) ;
/* *&代表什么? //https://zhidao.baidu.com/question/2266744263935050308.html
这是C++的语法写法,&在形参中表示“引用”实参,
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。
标准C是不支持这种写法的。
追问
&不是取地址符吗? 引用参数是什么意思
追答
&在变量定义区,表示引用,要注意它的用法,
&在变量操作区,表示取地址符,如:
int x=10, *p=&x ; //这里&作用在x上, 是取地址符
int &x ; //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量
*/
利用前序和中序求二叉树(源代码):
-
#include <iostream>
-
#include <cstdio>
-
#include <cstdlib>
-
#include <cstring>
-
using namespace std;;
-
const int N=31;
-
typedef struct BitNode
-
{
-
char value;
-
BitNode *lchild,*rchild;
-
}BitNode,*BiTree;
-
/* *&代表什么?
-
这是C++的语法写法,&在形参中表示“引用”实参,
-
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。
-
标准C是不支持这种写法的。
-
追问
-
&不是取地址符吗? 引用参数是什么意思
-
追答
-
&在变量定义区,表示引用,要注意它的用法,
-
&在变量操作区,表示取地址符,如:
-
int x=10, *p=&x ; //这里&作用在x上, 是取地址符
-
int &x ; //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。
-
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量
-
*/
-
void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)
-
{
-
if(l1<=r1&&l2<=r2)
-
{
-
int key=pre[l1];
-
int midIndex=-1;
-
for(int i=l2;i<=r2;i++)
-
{
-
if(in[i]==key)
-
{
-
midIndex=i;
-
break;
-
}
-
}
-
root=(BitNode *)malloc(sizeof(BitNode));
-
root->value=key;
-
root->lchild=NULL;
-
root->rchild=NULL;
-
int llen=midIndex-l2;
-
CreatTree(root->lchild, pre, l1+1, l1+llen, in, l2, midIndex-1);
-
CreatTree(root->rchild, pre, l1+llen+1, r1, in, midIndex+1, r2);
-
}
-
}
-
void postOrderTraverse(BitNode *&root)
-
{
-
if(root->lchild)
-
postOrderTraverse(root->lchild);
-
if(root->rchild)
-
postOrderTraverse(root->rchild);
-
printf("%c",root->value);
-
}
-
int main()
-
{
-
char pre[N],in[N];
-
while(scanf("%s",pre)!=EOF)
-
{
-
scanf("%s",in);
-
int len1=strlen(pre);
-
int len2=strlen(in);
-
BitNode *root=NULL;
-
CreatTree(root,pre,0,len1-1,in,0,len2-1);
-
postOrderTraverse(root);
-
printf("\n");
-
}
-
return 0;
-
}
原文地址:https://www.cnblogs.com/h2zZhou/p/9565214.html