当前位置:   article > 正文

C++ 实现将中序遍历的结果存储于数组并输出_c++如何将一个循环里得到的结果最后集合在一起输出

c++如何将一个循环里得到的结果最后集合在一起输出

易错点一

  • 关于数组动态输入
	int  str[10] ;
	for(int i = 0 ; i< 10 ;i++){
		scanf("%d",str[i]) ;
	}
  • 1
  • 2
  • 3
  • 4

错误原因在于,没有加入引用,正确写法如下

	int  str[10] ;
	for(int i = 0 ; i< 10 ;i++){
		scanf("%d",&str[i]) ;
	}
  • 1
  • 2
  • 3
  • 4

将中序遍历结果输出在数组中完整代码

  • 创建二叉树
  • 遍历输出
#include <stdio.h>
#include <stdlib.h>


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<T->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<n)
	{
		BST_Insert(T,str[i]);
		i++;
	}
}
 
 
 int array[10] ={0} ;
void InOrder(BiTree T)
{
	if(T!=NULL)
	{
		InOrder(T->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");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87

注意理解注释下为什么执行错误(附截图如下)

在这里插入图片描述

  • 建议:不要用 ++。先想好 pos 的准确意义是什么,以及函数究竟应该返回什么,什么不返回数组?因为数组是在函数外面开的,而整个过程都只是在往数组里添加东西而已。这个函数的调用者肯定持有这个数组的引用,所以我就不用返回数组

方式二

//pos代表存入到第几个位置
void InOrder(BiTree T, KeyType str[],int &pos)
{
	if (T != NULL)
	{
		InOrder(T->lchild,str,pos);
		printf("%3d", T->key);
		str[pos++] = T->key;//输出的同时存入到数组
		InOrder(T->rchild,str,pos);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/706769
推荐阅读
相关标签
  

闽ICP备14008679号