0 题目
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
1 分析
首先,遍历A的节点,找到与B的根节点值相同的节点。然后取判断以这两个节点开头的树,是否相等。
判断两个子树相等的条件也是一个递归。
知道t1为空的时候,就算是判断完了,此时返回true
bool HasSubtree(TreeNode *t1, TreeNode *t2) { bool ret = false; if (t1 != nullptr && t2 != nullptr) { // 如果值相同就去判断是否是子树 if (t1->val == t2->val) { ret = aux(t1, t2); } // 下面两个 只有在ret ==false 的时候才再去遍历 // 因为ret ==true 的时候是已经找到了子树,因此就需要在去便利了 if (ret == false) {// 左右依次遍历,都是在 ret==false的时候 ret = HasSubtree(t1->left, t2); } if (ret == false) { ret = HasSubtree(t1->right, t2); } } return ret; } bool aux(TreeNode *t1, TreeNode *t2) { // t2为nullptr的时候,表示t2完全在t1内 if (t2 == nullptr) { return true; } if (t1 == nullptr) { return false; } if (t1->val != t2->val) { return false; } return aux(t1->right, t2->right) && aux(t1->left, t2->left); }