二叉树--相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

思路

一、

何为相同?  必须从头到尾完完整整的相同,才算相同。

可通过前序遍历法,遍历整个树。

可通过以下思路:

//空节点

//至少有一个不为空

 //全不为空

二、

子问题:除了判断根节点,还需判断子树是否相同

结束条件:不同return false。 当完全相同时,根节点最终会走到空树,此时才能保证子树相同,返回true (也是唯一 一个可以返回true的条件)。

代码



bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    
    //空节点也需要判断

    if (p == NULL && q == NULL)     
        return true;

    //此处:至少有一个不为空树

    if (p == NULL || q == NULL)
        return false;

    
    //全不为空树


    //采用前序遍历法

    if (p->val != q->val)   //节点
        return false;

    return isSameTree(p->left, q->left)   //左树
        && isSameTree(p->right, q->right);     //右树

}

代码解读

1.

    //空节点也需要判断

    if (p == NULL && q == NULL)    

        return true;

树不能轻易assert判空,因为空节点也需要比较,也是树的一部分。

2.

    if (p == NULL || q == NULL)

        return false;

   由于第一个return的存在,能执行到此处时,必然一个不为空!

3.

 if (p->val != q->val)   //节点

        return false;

不能判断 == 就return true; 正如开头所说,必须全部相等才能return true;

4.

  return isSameTree(p->left, q->left)   //左树

        && isSameTree(p->right, q->right);     //右树

当所有递归都完成之后,每一层的结果都是true,才能最终返回true。

由于返回类型是bool类型,因此要用 && 逻辑与 连接两个递归结果。

相关推荐

  1. 相关

    2024-04-12 23:28:05       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 23:28:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 23:28:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 23:28:05       87 阅读
  4. Python语言-面向对象

    2024-04-12 23:28:05       96 阅读

热门阅读

  1. 关于Oracle数据库锁表查询与解除方法

    2024-04-12 23:28:05       36 阅读
  2. Pytorch register_forward_hook()

    2024-04-12 23:28:05       39 阅读
  3. 0412备战蓝桥杯,图论复习

    2024-04-12 23:28:05       44 阅读
  4. 排序算法-桶排序

    2024-04-12 23:28:05       40 阅读
  5. PostgreSQL高级sql积累

    2024-04-12 23:28:05       31 阅读