Leetcode572. 另一个树的子树(C语言)
数据结构-树:算法与数据结构参考
题目:
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点 和 这个节点的所有子孙。s 也可以看做它自身的一棵子树。例:
输入:[3,4,5,1,2,0] [4,1,2]
输出:false
思路:
两次递归,注意根节点另外处理
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isRSubtree(struct TreeNode* s, struct TreeNode* t){
if(!s && !t) return true;
if(!s || !t) return false; //注意顺序,仅为s,t其中一个为空的情况
if(s->val != t->val) return false; //每次均递归,故只比较根节点
return isRSubtree(s->left,t->left) && isRSubtree(s->right,t->right);
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
if(!s) return false; //每次均递归,此条件不能省
return isRSubtree(s,t) || isSubtree(s->left,t) || isSubtree(s->right,t);
}