力扣
思路首先,如果A或B为空,就返回false。
再考虑三种情况:
- B是以 节点 AA为根节点的子树 包含树 B
- 树 BB 是 树 AA左子树 的子结构
- 树 BB 是 树 A 右子树 的子结构
判断B是否是以 节点 AA为根节点的子树 包含树 B,终止条件:
- B为空,表示B匹配完了,返回true
- A为空,表示B没得匹配了,返回false
- A和B的值不同,返回false
如果以上都不符合,返回判断A左结点和B左结点是否是子树关系与上判断A右结点和B右结点是否是子树关系。
代码class Solution { public: bool recur(TreeNode* a,TreeNode* b){ if(b==NULL) return true; if(a==NULL||a->val!=b->val) return false; return recur(a->left,b->left)&&recur(a->right,b->right); } bool isSubStructure(TreeNode* A, TreeNode* B) { if(A==NULL||B==NULL) return false; return recur(A,B)||isSubStructure(A->left,B)||isSubStructure(A->right,B); } };
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)