题目:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:
` 1 1
/ \ / \
2 3 2 3`
[1,2,3], [1,2,3]
输出: true
示例 2:
输入:
1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
示例3:
输入:
1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/same-tree
思路
用dfs深搜方法,找到树里的每一个节点,并把节点上的值放到数组里,如果遇到NULL节点,就把相应的数组位置空出来,
两个数都遍历一遍之后,判断两个数组相应位置是否相等。
ok,就酱(^-^)。(时间复杂度是O(n))
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
int a[9999],b[9999];
int i = 0,j = 0;
bool isSameTree(TreeNode* p, TreeNode* q) {
memset(a,-111,sizeof(a));
memset(b,-111,sizeof(b));
dfs(p,i,a);
dfs(q,j,b);
if(i!=j)
return false;
for(int k=0; k<i; k++) {
if(a[k]!=b[k])
return false;
}
return true;
}
void dfs(TreeNode *g,int &k,int t[]){
if(!g) {
t[k++] =0 ;
return;
}
t[k++] =g->val;
dfs(g->left,k,t);
dfs(g->right,k,t);
}
};