基于二叉链表的树结构相等的判断
#include<iostream>
using namespace std;
typedef struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode() :val('0'), left(nullptr), right(nullptr) {};
TreeNode(char x) :val(x), left(nullptr), right(nullptr) {};
}TreeNode,*BiTree;
BiTree PreInsert() {
char x;
cin >> x;
if (x == '0') return nullptr;
TreeNode* root = new TreeNode(x);
root->left = PreInsert();
root->right = PreInsert();
return root;
}
void PreOrder(BiTree B1, BiTree B2,int &flag) {
if (B1 == nullptr && B2 == nullptr) return;
if (B1 == nullptr || B2 == nullptr || B1->val != B2->val) {
flag = 1;
return;
}
PreOrder(B1->left, B2->left,flag);
PreOrder(B1->right, B2->right,flag);
}
void isBinaryTreeEqual(BiTree B1, BiTree B2) {
int flag = 0;
PreOrder(B1, B2,flag);
if (flag == 1) {
cout << "NO" << endl;
}
else {
cout << "YES" << endl;
}
}
int main() {
BiTree T1;
BiTree T2;
while (true) {
T1 = PreInsert();
if (T1 == nullptr) break;
T2 = PreInsert();
isBinaryTreeEqual(T1, T2);
}
return 0;
}