输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
简要题解:
首先判空只要两颗树判空处理只要为空,只要有一颗树为空时即返回空处理。
然后dfs遍历两颗子树,分别对(A,B)(A-left,B)(A->right,B)判断只要有一个满足即为为真。主要代码如下:
/**
* 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 isSubStructure(TreeNode* A, TreeNode* B) {
if(B==NULL||A==NULL) return false;
return dfs(A,B)||isSubStructure(A->left,B)||isSubStructure(A->right,B);
}
bool dfs(TreeNode* A,TreeNode* B)
{
if(!B||!A)return !B?true:false;
if(A->val!=B->val) return false;
return dfs(A->left,B->left)&&dfs(A->right,B->right);
}
};