剑指offer——26树的子结构
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
题解:
注意,所谓的子结构,是树的形状和值相同,并非判断B是不是A的一部分【如果是这样,那就是直接比较地址了】
使用递归;
1 class Solution { 2 public: 3 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) 4 { 5 if (pRoot1 == nullptr || pRoot2 == nullptr)return false; 6 bool res = false; 7 if (pRoot1->val != pRoot2->val) 8 { 9 if (pRoot1->val == pRoot2->val) 10 res = DFS(pRoot1, pRoot2); 11 if (!res) 12 res = HasSubtree(pRoot1->left, pRoot2); 13 if (!res) 14 res = HasSubtree(pRoot1->right, pRoot2); 15 } 16 return res; 17 } 18 bool DFS(TreeNode* root1, TreeNode* root2) 19 { 20 if (root2 == nullptr)return true; 21 if (root1 == nullptr)return false; 22 if (root1->val != root2->val)return false; 23 return DFS(root1->left, root2->left) && DFS(root1->right, root2->right); 24 } 25 };