LeetCode-100.相同的树
2022.09.09
难度:简单
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int * BFS(struct TreeNode * p){
int * ans = (int *)malloc(sizeof(int) * 1000);
struct TreeNode ** que = (struct TreeNode **)malloc(sizeof(struct TreeNode *) * 1000);
int i = 0;
for(i; i < 1000; i++){
que[i] = (struct TreeNode *)malloc(sizeof(struct TreeNode));
}
int head = 0, tail = 1, nums = 0;
struct TreeNode * tp = p;
que[0] = tp;
ans[++nums] = tp -> val;
while(head != tail){
if(que[head] -> left){
que[tail++] = que[head] -> left;
ans[++nums] = que[head] -> left -> val;
}else ans[++nums] = -1;
if(que[head] -> right){
que[tail++] = que[head] -> right;
ans[++nums] = que[head] -> right -> val;
}else ans[++nums] = -1;
head++;
}
ans[0] = nums;
return ans;
}
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
int i = 0;
if(p == NULL && q == NULL) return true;
if((p != NULL && q == NULL) || (p == NULL && q != NULL)) return false;
int * ansp = BFS(p);
int * ansq = BFS(q);
if(ansp[0] != ansq[0]) return false;
for(i = 1; i < ansp[0]; i++){
if(ansp[i] != ansq[i]) return false;
//printf("ans[%d]:%d", i, ans[i]);
}
return true;
}
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p == NULL && q == NULL) return true;
else if(p == NULL || q == NULL) return false;
else if(p -> val != q -> val) return false;
else return isSamTree(p -> left, q -> left) && isSamTree(p -> right, q -> right);
}