描述:
先序建立两棵二叉排序树,采用二叉链表结构存储,将这两棵二叉排序树合并成一棵新的二叉排序树,并按照中序序列输出合并后的二叉排序树。
输入:
输入两行先序遍历的整型数据,并以此分别建立两棵二叉排序树(其中整型数据必须为大于等于零的整数)。
如输入某二叉排序树的先序序列为:12 8 4 -1 -1 10 -1 -1 16 13 -1 -1 18 -1 -1(其中-1代表空树)。
输出:
按照中序序列输出合并后的二叉排序树(输出结果后换行)。
输入样例:
12 8 4 -1 -1 10 -1 -1 16 13 -1 -1 18 -1 -1
17 6 2 -1 -1 9 -1 -1 24 19 -1 -1 26 -1 -1
输出样例:
2 4 6 8 9 10 12 13 16 17 18 19 24 26
#include<iostream>
using namespace std;
typedef struct BTNode
{
int data;
struct BTNode *lchild,*rchild;
}BTNode,*BTree;//二叉树节点
void Create_Tree(BTree *T)//先序创建二叉树,-1表示该树为空
{
int cd;
cin>>cd;
if(-1==cd) *T=NULL;
else
{
(*T)=new BTNode;
(*T)->data=cd;
Create_Tree(&(*T)->lchild);
Create_Tree(&(*T)->rchild);
}
}
void LDR(BTree T)//中序遍历输出
{
if(T)
{
LDR(T->lchild);
cout<<T->data<<" ";
LDR(T->rchild);
}
}
void InsertBST(BTree *T,int key)//向二叉排序树中插入单个关键字key
{
while((*T)!=NULL)
{
if((*T)->data>key) T=&(*T)->lchild;
else if((*T)->data<key) T=&(*T)->rchild;
}
(*T)=new BTNode;
(*T)->lchild=NULL;
(*T)->rchild=NULL;
(*T)->data=key;
}
void Insert_LDR(BTree T1,BTree T2)//向二叉排序树T1中插入二叉排序树T2中的所有关键字key
{
if(T2)
{
Insert_LDR(T1,T2->lchild);
InsertBST(&T1,T2->data);
Insert_LDR(T1,T2->rchild);
}
}
int main()
{
BTree T1,T2;
Create_Tree(&T1);
Create_Tree(&T2);
Insert_LDR(T1,T2);
LDR(T1);
cout<<endl;
return 0;
}