class Solution
{
private:
void helper(Node* root,vector<int>& ans){
if(root == nullptr){
return;
}
helper(root->left,ans);
ans.push_back(root->data);
helper(root->right,ans);
}
public:
//Function to check if two trees are identical.
bool isIdentical(Node *r1, Node *r2)
{
vector<int> ans1;
vector<int> ans2;
helper(r1,ans1);
helper(r2,ans2);
int n = ans1.size();
int m = ans2.size();
if(n != m) return false;
for(int i = 0;i<n;i++){
if(ans1[i] != ans2[i]){
return false;
}
}
return true;
}
};
在这我想知道两棵树是否相同,所以我检查它们的中序遍历并将它们存储在一个数组中,然后我的任务是比较两个数组是否相同
如果树是任意二叉树,则它们不是由其中序遍历唯一定义的。
举个例子,
2
/
1
和
1
\
2
具有相同的中序遍历。
只需进行递归比较即可:
bool identical_trees(const Node* a, const Node* b) {
return (a == nullptr && b == nullptr) // Both trees are empty
|| (a != nullptr && b != nullptr // Neither tree is empty
&& a->data == b->data
&& identical_trees(a->left, b->left)
&& identical_trees(a->right, b->right));
}