cho cây nhi phân tìm kiếm viết hàm trả về node chứ phần tử dương nhỏ nhất , nếu ko có trả về null
#include <iostream>
typedef int item; //kieu item la kieu nguyen
struct Node
{
item key; //truong key cua du lieu
Node* Left, * Right; //con trai va con phai
};
typedef Node* Tree; //cay
int insertNode(Tree& T, item x) // chen 1 Node vao cay
{
if (T != NULL)
{
if (T->key == x) return -1; // Node nay da co
if (T->key > x) return insertNode(T->Left, x); // chen vao Node trai
else if (T->key < x) return insertNode(T->Right, x); // chen vao Node phai
}
T = (Node*)malloc(sizeof(Node));
if (T == NULL) return 0; // khong du bo nho
T->key = x;
T->Left = T->Right = NULL;
return 1; // ok
}
void CreateTree(Tree& T) // nhap cay
{
int x;
while (1)
{
printf("Nhap vao Node: ");
scanf_s("%d", &x);
if (x == 0) break; // x = 0 thi thoat
int check = insertNode(T, x);
if (check == -1) printf("Node da ton tai!");
else if (check == 0) printf("Khong du bo nho");
}
}
// Duyet
Node* Min(Tree T)
{
if (T->Left != NULL && T->Right != NULL)
{
if (T->key < 0) {
Node* rs = Min(T->Right);
return rs == NULL ? NULL : rs;
}
else {
Node* rs = Min(T->Left);
return rs == NULL ? T : rs;
}
}
else if (T->Left == NULL && T->Right != NULL) {
if (T->key > 0) { return T; }
else {
Node* rs = Min(T->Right);
return rs == NULL ? NULL : rs;
}
}
else if (T->Right == NULL && T->Left != NULL) {
if (T->key > 0) {
Node* rs = Min(T->Left);
return rs == NULL ? T : rs;
}
else {
return NULL;
}
}
else {
if (T->key > 0) { return T; }
else {
return NULL;
}
}
}
int main()
{
Tree T;
T = NULL; //Tao cay rong
CreateTree(T); //Nhap cay
Node* x = Min(T);
printf("\n");
}
đây là code của em chạy thì được nhưng em thấy nó chưa đc tối ưu ạ , anh nào có cách giải khác chỉ em với