输入:两棵二叉树 root 与 subRoot
要求:判断 subRoot 是否是 root 的一个子树
输出:true / false
思路:
只要 root 的某个节点值与 subRoot 的根值相同,就可能成为子树的入口。
所以我们需要对于每个节点,尝试是否能匹配 subRoot。直接复用LC.100 相同的数 代码即可。
复杂度:
时间复杂度:O(n × m) n 为 root 的节点数,m 为 subRoot 节点数
空间复杂度:O(h)
class Solution {
public:
bool order(TreeNode* root, TreeNode* subroot) {
if (!root) {
return false;
}
return order2(root, subroot) || order(root->right, subroot) || order(root->left, subroot);
}
bool order2(TreeNode* p, TreeNode* q) {
if (!p && !q) {
return true;
}
else if ((!p && q) || (p && !q)) {
return false;
}
else if (p->val == q->val) {
}
else if (p->val != q->val) {
return false;
}
return order2(p->left, q->left) && order2(p->right, q->right);
}
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
return order(root, subRoot);
}
};
143

被折叠的 条评论
为什么被折叠?



