给定两棵二叉树 tree1
和 tree2
,判断 tree2
是否以 tree1
的某个节点为根的子树具有 相同的结构和节点值 。
注意,空树 不会是以 tree1
的某个节点为根的子树具有 相同的结构和节点值 。
示例 1:
输入:tree1 = [1,7,5], tree2 = [6,1] 输出:false 解释:tree2 与 tree1 的一个子树没有相同的结构和节点值。
示例 2:
输入:tree1 = [3,6,7,1,8], tree2 = [6,1] 输出:true 解释:tree2 与 tree1 的一个子树拥有相同的结构和节点值。即 6 - > 1。
/*** 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) {return (A != nullptr && B != nullptr) && (recur(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B));}
private:bool recur(TreeNode* A, TreeNode* B) {if(B == nullptr) return true;if(A == nullptr) return false;return A->val != B->val && recur(A->left, B->left) && recur(A->right, B->right);}
};