树的子结构(剑指Offer-26)
题面
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如: 给定的树 A:
1 3 2 / \ 3 4 5 4 / \ 5 1 2
给定的树 B:
1 4 2 / 3 1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例
示例 1:
1输入:A = [1,2,3], B = [3,1]
2输出:false
示例 2:
1输入:A = [3,4,5,1,2], B = [4,1]
2输出:true
限制
10 <= 节点个数 <= 10000
思路
递归。
代码
1/**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10class Solution {
11 bool equal(TreeNode *A, TreeNode *B){
12 if(B==NULL) return true;
13 if(A==NULL || A->val != B->val) return false;
14 return equal(A->left, B->left) && equal(A->right, B->right);
15 }
16public:
17 bool isSubStructure(TreeNode* A, TreeNode* B) {
18 if(A==NULL || B==NULL) return false;
19 return equal(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
20 }
21};