看两个二叉树形状和内容是否完全相等。可以递归求解,每一个调用栈内存储两个返回的bool结果:lflag和rflag。然后返回它们的与。同样,和通常的递归思想一样,调用栈开始就要做好递归结束的判断:a、b都为NULL返回true,一个为NULL另一个不为NULL返回false,val不相同返回false。
C++代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @aaram a, b, the root of binary trees.
* @return true if they are identical, or false.
*/
bool isIdentical(TreeNode* a, TreeNode* b) {
return search(a, b);
}
bool search(TreeNode * a, TreeNode * b){
if (a == NULL && b == NULL) {
return true;
}
if (a == NULL || b == NULL) {
return false;
}
if (a->val != b->val) {
return false;
}
bool lflag = search(a->left, b->left);
bool rflag = search(a->right, b->right);
return (lflag && rflag);
}
};
Python代码:
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
this.val = val
this.left, this.right = None, None
"""
class Solution:
"""
@param a, b, the root of binary trees.
@return true if they are identical, or false.
"""
def isIdentical(self, a, b):
return self.search(a,b)
def search(self,a,b):
if a==None and b==None:
return True
if a==None or b==None:
return False
if a.val != b.val:
return False
a1 = self.search(a.left, b.left)
a2 = self.search(a.right, b.right)
return a1 and a2