剑指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 };
 
 

猜你喜欢

转载自www.cnblogs.com/zzw1024/p/11673778.html