Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
#include<iostream>
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
bool isSameTree(TreeNode *p, TreeNode *q)
{
if (p == NULL && q == NULL)
return true;
if (p == NULL || q == NULL)
return false;
if (p->val == q->val)
{
if (isSameTree(p->left, q->left) && isSameTree(p->right, q->right))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
};
TreeNode& Build_Binary_Tree(unsigned long t_ulTreeDepth,int *t_ipSeq)
{
unsigned long ulSeqLen = (unsigned long)pow(2, t_ulTreeDepth) - 1;
TreeNode *TNpTree = (TreeNode*)malloc(sizeof(TreeNode));
TNpTree->val = t_ipSeq[0];
if (t_ulTreeDepth == 1)
{
TNpTree->left = NULL;
TNpTree->right = NULL;
}
else
{
TNpTree->left = &Build_Binary_Tree(t_ulTreeDepth - 1, &t_ipSeq[1]);
TNpTree->right = &Build_Binary_Tree(t_ulTreeDepth - 1, &t_ipSeq[(ulSeqLen + 1) / 2]);
}
return *TNpTree;
}
int main()
{
unsigned long ulTreeDepth = 3;
bool bResult;
Solution SoTree;
int iSeq1[7] = { 0, 1, 2, 3, 4, 5, 6 };
int iSeq2[7] = { 0, 1, 2, 3, 4, 5, 6 };
TreeNode *Tree1 = &Build_Binary_Tree(ulTreeDepth, iSeq1);
TreeNode *Tree2 = &Build_Binary_Tree(ulTreeDepth, iSeq2);
Tree1->right = NULL;
//Tree2->right = NULL;
bResult = SoTree.isSameTree(Tree1, Tree2);
system("pause");
}