#include <iostream>
#include <string>
using namespace std;
typedef int KeyType;
typedef struct
{
KeyType key;
} DataType;
typedef struct Node
{
DataType data;
struct Node *lchild, *rlchild;
}BiTreeNode,*BiTree;
//二叉排序树查找
BiTree BSTSearch(BiTree T, DataType x)
{
BiTreeNode *p;
if(T != NULL)
{
p = T;
while(p != NULL)
{
if(p->data.key == x.key)
return p;
else if(x.key < p->data.key)
p = p->lchild;
else p = p->rlchild;
}
}
return NULL;
}
//二叉排序树插入
bool BSTInsert(BiTree *T, DataType x)
{
BiTreeNode *p, *cur, *parent = NULL;
cur = *T;
while(cur != NULL)
{
if(cur->data.key == x.key)
{
return false;
}
parent = cur;
if(x.key < cur->data.key)
cur = cur->lchild;
if(x.key > cur->data.key)
cur = cur->rlchild;
}
p = new BiTreeNode;
if(!p)
return false;
p->data = x;
p->lchild = NULL;
p->rlchild = NULL;
if(!parent)
*T = p;
else
if(x.key < parent->data.key)
parent->lchild = p;
else
parent->rlchild = p;
return true;
}
//中序遍历算法
void InorderTrverse(BiTree T)
{
if(T)
{
InorderTrverse(T->lchild);
cout << T->data.key << " ";
InorderTrverse(T->rlchild);
}
}
int main()
{
BiTree T = NULL, p;
DataType table[] = { 37,32,35,62,82,95,73,12,5 };
int n = sizeof(table) / sizeof(table[0]);
DataType x = { 73 };
int i;
for(i = 0;i < n;i++)
{
BSTInsert(&T, table[i]);
}
cout << "中序遍历序列为:" << endl;
InorderTrverse(T);
cout << "*** ***" << endl;
p = BSTSearch(T, x);
cout << p->data.key << endl;
return 0;
}
初学数据结构---动态查找之二叉排序树
原文作者:二叉查找树
原文地址: https://blog.csdn.net/Mr_Ming_/article/details/73135738
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/Mr_Ming_/article/details/73135738
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。