class Solution {
public:
bool HasSubtree(TreeNode* A, TreeNode* B){
bool result = false;if(!A||!B)returnNULL;if(A->val==B->val)
result =AhasB(A,B);if(!result)
result =HasSubtree(A->left, B);if(!result)
result =HasSubtree(A->right, B);return result;}
bool AhasB(TreeNode* A, TreeNode* B){if(!B)//先判断B是不是空了,若空了,说明B遍历完了,也就是B是A的子结构。return true;if(!A)//若B不空,A空了,说明A比B所在的树小,肯定就不会包含B。return false;if(A->val!=B->val)//若A,B都不空,看两个节点的值是否一样,若不一样,返回false。return false;returnAhasB(A->left, B->left)&&AhasB(A->right, B->right);//若一样,再去看左右子树。}};
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:要依次遍历A中的节点,找到和B的根节点一样的节点时,就检查A中以当前节点存在的子树是否包含B。class Solution {public: bool HasSubtree(TreeNode* A, TreeNode* B) { bool result =...