#include <iostream>
using namespace std;
#define MAX 1000
struct Node
{
int key;
struct Node* left;
struct Node* right;//2 con tro trai phai thoi chu ban
};
typedef struct Node* TREE;
void khoitao (TREE &root)
{
root = NULL;
}
//////////////////////////////////duyet cay theo thu tu giua
void INORDER_TREE_WALK(TREE &root) //goi la Left-Node-Right
{
if (root != NULL)
{
INORDER_TREE_WALK (root->left);
cout << root
->key
<< " "; INORDER_TREE_WALK (root->right);
}
}
bool TREE_SEARCH (TREE &T, int k) /////////Sua ham nay chut, co the tra ve kieu int cung ok
{
if (T==NULL) return false;
else if (k == T ->key)
return true;
else if (k < T ->key)
return TREE_SEARCH (T ->left, k);
else
return TREE_SEARCH (T ->right, k);
}
/*TREE TREE_MINIMUM (TREE &T) //// 2 ham max min nay minh chang biet dung de lam gi
{
while (T ->left != NULL)
T = T ->left;
return T;
}
TREE TREE_MAXIMUM (TREE &T)
{
while (T ->right != NULL)
T = T ->right;
return T;
}
TREE TREE_SUCCESSOR (TREE &T) //Vi luc dau hieu sai van de nen ham nay khong chinh xac roi
{ //Ham nay de lam gi the, minh se sua them khi hieu y dinh cua ham
if (T ->right != NULL)
return TREE_MINIMUM (T ->right);
TREE y = T; //////////////
while (y != NULL && T == y ->right)
{
T = y;
y = y ->p;
}
return y;
}
TREE TREE_PREDECESSOR (TREE &T) /////////cung vay, khong hieu de lam gi
{
if (T ->left != NULL)
return TREE_MAXIMUM (T ->left);
TREE y = T ->p;
while (y != NULL && T == y ->left)
{
T = y;
y = y ->p;
}
return y;
}*/
void TREE_ADDNODE (TREE &T, TREE z)//add node to tree
{
TREE p=T;
if (p==NULL) p=z;
else if(p ->key > z->key) TREE_INSERT (p->left,z);
else TREE_INSERT (p->right,z);
}
/*TREE TREE_DELETE (TREE &T, TREE z)
{
TREE y, x, r;
if (z ->left == NULL || z ->right == NULL)
y = z;
else
y = TREE_SUCCESSOR (z);
if (y ->left != NULL)
x = y ->left;
else
x = y ->right;
if (x != NULL)
x ->p = y ->p;
r = y ->p;
if (y ->p == NULL)
T = x;
else if (y = r ->left)
r ->left = x;
else
r ->right = x;
if (y != x)
z ->key = y ->key;
return y;
}
void PREORDER_TREE(TREE &T) // nhu ham inorder thui, day la ham duyet cay: Node-Left-Right
{
if(T != NULL)
{
cout << T ->key << endl;
PREORDER_TREE(T ->left);
PREORDER_TREE(T ->right);
}
}
/*void main ()
{
int k, delk;
TREE T, z;
khoitao (T);
do
{
cout << "Nhap vao khoa cua cay nhi phan (-1 de ket thuc): ";
cin >> k;
z = new (Node);
z ->key = k;
z ->left = NULL;
z ->right = NULL;
z ->p = NULL;
if (z ->key > 0)
TREE_INSERT (T, z);
}
while (z ->key > 0);
PREORDER_TREE(T);
cout << "Nhap vao khoa can xoa: ";
cin >> delk;
// đến đây mình không biết gọi hàm xóa như thế nào?
PREORDER_TREE(T);
}*/