构造一棵二叉排序树并对其进行中序遍历输出。 在二叉排序树中查找某一关键字,若存在,显示“查找成功”以及查找成功时关键字比较次数;若不存在,将其插入到二叉排序树中,再中序遍历输出。
输入格式
第一行一个正整数nn表示关键字个数;第二行输入nn个不相同的整数,空格分隔;第三行输入一个整数关键字xx
输出格式
第四行显示中序遍历原二叉排序树后的有序序列,空格分隔。 若存在xx,则第五行显示查找成功 y
,y
为查找成功时关键字比较次数。 若不存在xx,在第五行显示插入成功
,第六行输出中序遍历新二叉排序树后的有序序列,空格分隔。
样例输入1
5
23 56 12 18 70
23
样例输出1
12 18 23 56 70
查找成功 1
样例输入2
5
23 56 12 18 70
20
样例输出2
12 18 23 56 70
插入成功
12 18 20 23 56 70
[程序代码]
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define Yes 1
#define No 0
typedef short Status;
typedef short ElemType;
struct BiTreeNode/* 二叉树结点定义 */
{
ElemType key;
struct BiTreeNode *LChild;
struct BiTreeNode *RChild;
};
struct QueueNode/* 链队列结点 */
{
struct BiTreeNode *pointer;/* 存储二叉树的根结点地址 */
struct QueueNode *next;
};
struct QueueInfo/* 链队列信息结点 */
{
QueueNode *Qfront;/* 队头指针 */
QueueNode *Qrear;/* 队尾指针 */
};
struct StackNode/* 链栈结点 */
{
struct BiTreeNode *pointer;/* 存储二叉树的根结点地址 */
struct StackNode *next;
};
/* */
Status CreateBST(struct BiTreeNode* &T, short m);
Status InsertBST(struct BiTreeNode* &T, ElemType key);
BiTreeNode* SearchBST(struct BiTreeNode* &T, ElemType key);
void InOrderTraverse(BiTreeNode* &T);
short NodeCount(BiTreeNode* &T);
BiTreeNode* SearchBST_NotRecursion(struct BiTreeNode* T, ElemType key, ElemType &n);
/* */
Status InitQueue(QueueInfo* &Q_Info);
Status EnQueue(QueueInfo* &Q_Info, BiTreeNode *T);
Status DeQueue(QueueInfo* &Q_Info, BiTreeNode* &T);
Status QueueEmpty(QueueInfo* &Q_Info);
short GetQueueLength(QueueInfo* &Q_Info);
BiTreeNode* GetQueueTop(struct QueueInfo* &Q_Info);
/* */
Status InitStack(StackNode* &S);
Status Push(StackNode* &S, BiTreeNode *T);
Status Pop(StackNode* &S, BiTreeNod