栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 实现将中序遍历的结果存储于数组并输出

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 实现将中序遍历的结果存储于数组并输出

文章目录
  • 易错点一
  • 将中序遍历结果输出在数组中完整代码

易错点一
  • 关于数组动态输入
	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(kkey)
		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(ilchild);
		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 的准确意义是什么,以及函数究竟应该返回什么,什么不返回数组?因为数组是在函数外面开的,而整个过程都只是在往数组里添加东西而已。这个函数的调用者肯定持有这个数组的引用,所以我就不用返回数组
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443734.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号