Kiểm tra 2 cây nhị phân có phải là phản chiếu của nhau hay không

Em đang bí bài này mong mọi người giúp đỡ ạ.
Cho khai báo cây nhị phân như sau:

struct Node{
     ElementType Key;
      struct Node *Left, *Right;
};
 typedef struct Node *Tree;

Đề bài: hãy viết hàm isMirrors() kiểm tra xem hai cây có là phản chiếu của nhau hay không.
Dữ liệu đầu vào: hai cây nhị phân T1 và T2.
Dữ liệu đầu ra: trả về 1 nếu cây T1 và T2 là phản chiếu của nhau; trả về 0 nếu ngược lại.

image
Mong nhận được sự giúp đỡ của các anh chị, em xin cảm ơn ạ.

bạn có biết duyệt cây hay không?
bạn hãy viết hàm list tất cả value của 1 cây xem

Thường mình duyệt cây theo tiền tự được không ạ?

void preOrder(Tree T) {
if(T!= NULL) {
printf("%d ", T->Key);
preOrder(T->Left);
preOrder(T->Right);
}

Giờ bạn thử in cây thứ 1 theo code này, rồi đảo 2 dòng cuối lại, rồi in thử cây thứ 2 xem?

preOrder(T->Right);
preOrder(T->Left);
1 Like

bạn biết duyệt cây bằng đệ quy thì dễ rồi

bool isMirrors(Tree T, Tree T2) {
// có 3 case chính
// 1. cả T1 và T2 đều null => true
// 2. chỉ T1 hoặc T2 null => false
// 3. cả T1 và T2 đều khác null

// 3.1 Key khác nhau => false
// 3.2 Key giống nhau => tiếp tục check tiếp node con 
// như thế này return isMirrors(T1->Left, T2->Right) && isMirrors(T1->Right, T2->Left)
// 2 node có data giống nhau và child đối xứng nhau 
}

chia if/else mà xử thôi

5 Likes

Mình run ra đúng rồi cảm ơn bạn nhiều ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?