Professional Documents
Culture Documents
Contents
Cây nhị phân trong C++...........................................................................................................................1
Cây nhị phân: cài đặt node, node* = tree, phương thức tạo tree, duyệt tree theo 3 cách
và hủy tree............................................................................................................................................3
Cấu trúc node....................................................................................................................................3
Cấu trúc cây (Optional)....................................................................................................................4
Duyệt cây nhị phân...........................................................................................................................4
Hủy cây nhị phân..............................................................................................................................6
Thêm node.........................................................................................................................................7
Tìm một phần tử trong cây nhị phân tìm kiếm..............................................................................7
Hủy node trên cây nhị phân tìm kiếm.............................................................................................8
Source code.......................................................................................................................................10
Cây nhị phân: cài đặt node, node* = tree,
phương thức tạo tree, duyệt tree theo 3 cách và
hủy tree
Tree myTree;
void CreateTree(Tree &root)
{
root = NULL;
}
Trường hợp 1
// node p là node cần thay thế, tree là cây đang xét (cây bên phải)
void FindAndReplace1(Tree &p, Tree &tree)
{
if (tree->left) // check thử nó có con trái hay không, khi false thì dừng lại tại điểm nhỏ nhất (node
lá trái nhất nên không có con)
FindAndReplace1(p, tree->left); // tiếp tục tìm
else // tree là node trái nhất
{
p->data = tree->data; // copy data
p = tree; // trỏ node p vào node tree sẽ làm thế mạng bị xóa
tree = tree->right; // node trái không còn tuy nhiên node phải có thể còn nên ta phải nối chúng
lại
}
}
Trường hợp 2
// node p là node cần thay thế, tree là cây đang xét (cây bên trái)
void FindAndReplace2(Tree &p, Tree &tree)
{
if (tree->right) // chưa phải lớn nhất (phải nhất)
FindAndReplace2(p, tree->right); // tiếp tục tìm
else // tree là node trái nhất
{
p->data = tree->data; // copy data
p = tree; // trỏ node p vào node tree sẽ làm thế mạng bị xóa
tree = tree->left; // node phải không còn tuy nhiên node trái có thể còn nên ta phải nối chúng lại
}
}
Full code xóa một node ra khỏi cây nhị phân:
Source code
struct Node
{
int data;
Node *left;
Node *right;
};