判断两棵树是否相等,是否是子树

  • 给定两个二叉树,编写一个函数来检验它们是否相同。
    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
 if (p==NULL && q==NULL)//两个都为空
   return ture;
 if (p!=NULL && q!=NULL)//两个都不为空
   return (p->val==q->val)&&isSameTree(p->left,q->left)
           &&isSameTree(p->right,q->right);
 else  return false;//一个为空,一个不为空
}

  • 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

思路:可以引用一个isSametree函数,如果是子树,则两个部分肯定相等

bool isSametree (struct TreeNode* p,struct TreeNode* q){
  if (p==NULL && q==NULL){
     return true;}
  if (p!=NULL && q!=NULL){
     return (p->val==q->val)&&isSametree(p->left,q->left)
         &&isSametree(p->right,q->right);}
 else  {
    return false;}
} 
  
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
    if(s==NULL){
       return false;}
    if(isSametree(s,t){
    //判断两棵树是否完全相等
       return true;}
    if(isSubtree(s->left,t)){
    //判断左子树是否为子树
       return true;}
    if(isSubtree(s->right,t)){
    //判断右子树是否为子树
       return true;}
    else {
       return false;}
  }

  • 给定一个二叉树,找出其最大深度。
    二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
int maxDepth(struct TreeNode* root){
  if (root==NULL)
    return 0;
  int ldepth = maxDepth(root->left);
  int rdepth = maxDepth(root->rigth);
  return ldepth>rdepth?ldepth+1:rdepth+1;
 }

你可能感兴趣的:(判断两棵树是否相等,是否是子树)