leetcode面试题04.10(检查子树)--C语言实现

痴心易碎 提交于 2020-08-14 14:02:50

求:

检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。

如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。

示例1:

 输入:t1 = [1, 2, 3], t2 = [2]
 输出:true
示例2:

 输入:t1 = [1, null, 2, 4], t2 = [3, 2]
 输出:false
提示:

树的节点数目范围为[0, 20000]。

 

解:

思路:判断t1和其子树是否有某颗树与t2相等即可,递归实现。只要有相等的树,返回真,否则返回假。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 
bool   isSameTree(  struct   TreeNode* p,   struct   TreeNode* q){
     if  (p==NULL && q==NULL)    return   true ;
     if  (p==NULL || q==NULL)    return   false ;
     return   (p->val==q->val) &&isSameTree(p->left,q->left) &&isSameTree(p->right,q->right);
}
 
bool  checkSubTree( struct  TreeNode* t1,  struct  TreeNode* t2){
     if (t1==NULL)   return  t2==NULL;
     return  isSameTree(t1,t2)||checkSubTree(t1->left,t2)||checkSubTree(t1->right,t2);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!