2007-d-四


#include
#include

typedef struct BTNode {
	int		data;
	struct BTNode	* lchild;
	struct BTNode	* rchild;
} BTNode;

/* 创建排序树 */
BTNode* create()
{
	BTNode	*root;
	int	n;
	scanf( "%d", &n );
	if ( n == -1 )
		return(NULL);
	else{
		root		= (BTNode *) malloc( sizeof(BTNode) );
		root->data	= n;
		root->lchild	= create();
		root->rchild	= create();
	}
	return(root);
}


/* 向二叉排序树中插入值 */
void insert( BTNode* root, int key )
{
	BTNode	* p	= NULL, *pre = NULL;
	BTNode	* c	= (BTNode *) malloc( sizeof(BTNode) );
	c->data		= key;
	c->lchild	= NULL;
	c->rchild	= NULL;
/* 树为空 */
	if ( NULL == root )
	{
		root == c;
	}else{
		p = root;
		while ( NULL != p )
		{
			pre	= p;
			p	= (key > p->data) ? p->rchild : p->lchild; /* 已知值不重复 */
		}
		if ( pre->data < key )
			pre->rchild = c;
		else pre->lchild = c;
	}
}


/* 遍历二叉排序树b将b插入a中 */
void inos( BTNode *a, BTNode *b )
{
	BTNode *p = b;
	if ( p != NULL )
	{
		if ( p->lchild )
			inos( a, p->lchild );
		insert( a, p->data );
		if ( p->rchild )
			inos( a, p->rchild );
	}
}


/* 输出排序树 */
void out( BTNode *root )
{
	BTNode *p = root;
	if ( p != NULL )
	{
		if ( p->lchild )
			out( p->lchild );
		printf( "%d ", p->data );
		if ( p->rchild )
			out( p->rchild );
	}
}


int main()
{
	BTNode* root1, *root2;
	printf( "输入root1:\n" );
	root1 = create();
	printf( "输入root2:\n" );
	root2 = create();
	inos( root1, root2 );
	out( root1 );
}



测试数据及结果

QQ截图20161105110320