Task:
思路与算算实现
对树有个稍微的了解先,看代码里给的定义:
可以看出树
- 有值:val;
- 有左右节点:left 和right;
- 有形式:节点:结点值、左孩子、右孩子、
那么题目要求就是两个树一样,那就节点,左孩子,右孩子都一样!
所以首先边界检查:
(1)两个树都是空的,那没错了就是一毛一样;
(2)如果都不空且值还相等,那就用递归的形式再去判断:这里条件就是看这个节点的左子树和右子树是否一样,就这样一直递归到页节点!
(3)如果不满足(2)中的判定条件(都不为空,并且值相等),那就说明出现异常不相等了,直接返回false;
代码:
/**
* 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:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL && q==NULL) return true;
if(p!=NULL && q!=NULL && p->val == q->val){
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}else{
return false;
}
}
};
提交结果: