二叉搜索树实现――C++ (二)

2014-11-24 02:47:00 · 作者: · 浏览: 3
ion tmp;

if( T == NULL ){
cout << "未找到元素!" << endl;
}else if( x < T->data ){
T->left = Delete( x, T->left );
}else if( x > T->data ){
T->right = Delete( x, T->right );
}else if( T->left && T->right ){ // x == T->data
tmp = FindMin( T->right );
T->data = tmp->data;
T->right = Delete( T->data, T->right );
}else{
tmp = T;
if( T->left == NULL )
T = T->right;
else if( T->right == NULL )
T = T->left;
free( tmp );
}
return T;
}

void InOrderPrint( SearchTree T )
{
if( T != NULL )
{
InOrderPrint( T->left );
cout << T->data << " ";
InOrderPrint( T->right );
}
}

void PreOrderPrint( SearchTree T )
{
if( T != NULL )
{
cout << T->data << " ";
PreOrderPrint( T->left );
PreOrderPrint( T->right );
}
}

BinaryTree.cpp


[cpp]
#include "BinaryTree.h"

void main()
{
SearchTree T;
Position P;
int n = 0;
int x = 0;

T = MakeEmpty( NULL );
cout << "输入二叉树大小:"<< endl;
cin >> n;
while( n-- )
{
cout << "输入插入结点:";
cin >> x;
T = Insert( x, T );
}

//for( int i=0; i < n; i++ )

cout << "最大元素:" << FindMax( T )->data << endl;
cout << "最小元素:" << FindMin( T )->data << endl;

cout << "中序遍历:";
InOrderPrint( T );
cout << endl;

cout << "前序遍历:";
PreOrderPrint( T );
cout << endl;

/*
cout << "输入要删除的结点:"<< endl;
cin >> x;
//Delete( x, T );
T = Delete( x, T );
InOrderPrint( T );
*/

system("PAUSE");
}

#include "BinaryTree.h"

void main()
{
SearchTree T;
Position P;
int n = 0;
int x = 0;

T = MakeEmpty( NULL );
cout << "输入二叉树大小:"<< endl;
cin >> n;
while( n-- )
{
cout << "输入插入结点:";
cin >> x;
T = Insert( x, T );
}

//for( int i=0; i < n; i++ )

cout << "最大元素:" << FindMax( T )->data << endl;
cout << "最小元素:" << FindMin( T )->data << endl;

cout << "中序遍历:";
InOrderPrint( T );
cout << endl;

cout << "前序遍历:";
PreOrderPrint( T );
cout << endl;

/*
cout << "输入要删除的结点:"<< endl;
cin >> x;
//Delete( x, T );
T = Delete( x, T );
InOrderPrint( T );
*/

system("PAUSE");
}