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

  • 给定两个二叉树,编写一个函数来检验它们是否相同。
    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
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;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值