合并二叉排序树

来源:互联网 发布:淘宝网雪地靴女 编辑:程序博客网 时间:2024/05/15 02:55

描述:
先序建立两棵二叉排序树,采用二叉链表结构存储,将这两棵二叉排序树合并成一棵新的二叉排序树,并按照中序序列输出合并后的二叉排序树。

输入:
输入两行先序遍历的整型数据,并以此分别建立两棵二叉排序树(其中整型数据必须为大于等于零的整数)。
如输入某二叉排序树的先序序列为: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;}

程序运行图

1 0