https://leetcode-cn.com/problems/subtree-of-another-tree/
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
示例 1: 给定的树 s:
3 / \ 4 5 / \ 1 2给定的树 t:
4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
示例 2: 给定的树 s:
3 / \ 4 5 / \ 1 2 / 0给定的树 t:
4 / \ 1 2返回 false。
/* 思路: 先找到根节点相同的节点,若没有相同则返回false; 找到后对比两棵树的所有节点是否相同 */ bool diff_tree(struct TreeNode* s, struct TreeNode* t){ if((s == NULL && t != NULL) || (s != NULL && t == NULL)) return false; if(s == NULL && t == NULL) return true; // 这个地方必须用&& ,比较所有节点(当前节点,左右子节点) return s->val == t->val && diff_tree(s->left, t->left) && diff_tree(s->right, t->right); } bool isSubtree(struct TreeNode* s, struct TreeNode* t){ if(s == NULL) return false; int flag = false; if(s->val == t->val) flag = diff_tree(s, t); // 这个地方必须用 || ,要遍历完s 的节点(特殊类似于[1,1] [1]) return flag || isSubtree(s->left, t) || isSubtree(s->right, t); }