- 易错点一
- 将中序遍历结果输出在数组中完整代码
- 关于数组动态输入
int str[10] ;
for(int i = 0 ; i< 10 ;i++){
scanf("%d",str[i]) ;
}
错误原因在于,没有加入引用,正确写法如下
int str[10] ;
for(int i = 0 ; i< 10 ;i++){
scanf("%d",&str[i]) ;
}
将中序遍历结果输出在数组中完整代码
- 创建二叉树
- 遍历输出
#include#include typedef int KeyType; typedef struct BSTNode{ KeyType key; struct BSTNode *lchild,*rchild; }BSTNode,*BiTree; int BST_Insert(BiTree &T,KeyType k) { if(NULL==T) { //为新节点申请空间 T=(BiTree)malloc(sizeof(BSTNode)); T->key=k; T->lchild=T->rchild=NULL; return 1;//代表插入成功 } else if(k==T->key) return 0;//发现相同元素,就不插入 else if(k key) return BST_Insert(T->lchild,k); else return BST_Insert(T->rchild,k); } //创建二叉排序树 void Creat_BST(BiTree &T,KeyType str[],int n) { T=NULL; int i=0; while(i lchild); printf("%3d",T->key); InOrder(T->rchild); } } int InOrderStr(BiTree T,int pos ,int array[]) { if(T==NULL) return pos ; pos = InOrderStr(T->lchild,pos,array); array[pos] =T->key ; return InOrderStr(T->rchild,pos+1,array); } //void InOrder2(BiTree T) //{ // if(T!=NULL) // { // InOrder(T->lchild); // int * i = 0 ; // array[(*i)++] = T->key ; // InOrder(T->rchild); // } //} int main() { BiTree T; BiTree parent;//存储父亲结点的地址值 BiTree search; //KeyType str[10] ={87,7,60,80,59,34,86,99,21,3} ;//将要进入二叉排序树的元素值 KeyType str[10] ; for(int i = 0 ; i< 10 ;i++){ scanf("%d",&str[i]) ; } Creat_BST(T,str,10); InOrderStr(T,0,array) ; for(int i =0 ;i<10;i++){ printf("%d ",array[i]) ; } system("pause"); }
注意理解注释下为什么执行错误(附截图如下)
- 建议:不要用 ++。先想好 pos 的准确意义是什么,以及函数究竟应该返回什么,什么不返回数组?因为数组是在函数外面开的,而整个过程都只是在往数组里添加东西而已。这个函数的调用者肯定持有这个数组的引用,所以我就不用返回数组



