leetcode 剑指offer26 树的子结构

63 阅读1分钟

leetcode 剑指offer26 树的子结构

思路:

  1. 深度优先遍历,B 树要么是 A 本身,要么是 A 左子树,要么是 A 的右子树;
  2. 当 B 树(子结构树)为空时,是树的子结构;
  3. 如果 B 树 不为空,A 树 为空时,则不是子结构;
  4. 如果 A 树 B 树 都不为空,但结点值不同,则不是子结构;
  5. 在本层满足后,再分别检查两个树的左右子孩子;

题解:

class Solution {
public:
    bool compare(TreeNode* A, TreeNode* B) {
        if(B == NULL) return true;
        if(A == NULL) return false;
        if(A->val != B->val) return false;
        return compare(A->left, B->left) && compare(A->right, B->right);
    }
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        if(B == NULL) return false;
        if(A == NULL) return false;
        return compare(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
    }
};