地址 https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / 4 5 / 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:A = [1,2,3], B = [3,1] 输出:false 示例 2: 输入:A = [3,4,5,1,2], B = [4,1] 输出:true 限制: 0 <= 节点个数 <= 10000
在熟练掌握树的遍历上 进行比对即可
注意树中可能有相同值的节点 所以一个A的子树不等同B树,还要继续查找
class Solution { public: bool compareTree(TreeNode* A, TreeNode* B) { if ((A == NULL && B != NULL)) { return false; } if (( B == NULL)) return true; if (A->val != B->val) return false; return compareTree(A->left, B->left) && compareTree(A->right, B->right); } bool dfs(TreeNode* A, TreeNode* B) { if (A == NULL) return false; if (A->val == B->val && compareTree(A, B)) { return true; } return dfs(A->left, B) || dfs(A->right, B); } bool isSubStructure(TreeNode* A, TreeNode* B) { if (A == NULL || B == NULL) return false; return dfs(A, B); } };