LeetCode题解:Same Tree

题目链接:

same-tree

题目描述:

Give two binary trees,write a function to check

if they are equal or not .

Two binary trees are considered equal if they are

structurally identical and the nodes have the same

value.

题目解释:

给定两个二叉树,实现一个函数来判断这两个

二叉树是否相同。

这里“相同”的概念不仅仅是指节点的数值,还

包括二叉树的结构是否相同(左子树跟右子树)。

解题方案:

涉及到树的问题,很多都会利用到递归的思想,

在这里我们依然是使用递归的方式。

我们从树的根开始,递归的去判断左子树和右

子树是否相同。

首先我们确定递归出口:

1.如果两课树都遍历完毕,遍历完毕的条件是

p == null and q == null,中途并没有return false

那么就return true.

2.如果在遍历过程中出现p、q中有一个为null的

情况,就说明两个二叉树在结构上不同,假设

p为null,那么说明第一个二叉树比第二个二叉

树少一课q子树,return false。

3.p q 的节点值不同 return false.

这三个条件就是递归出口,判断完这三个条件

以后我们继续递归左子树和右子树就可以了。

return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);

下面是AC的源码:

/**
 * Definition for binary tree
 * 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;
    }
    if(p->val != q->val )
    {
      return false;
    }
    return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
PS:我犯了个挺低级的错误。

这里要注意一个问题,在最开始我实现这个

时候,我构建测试用例(TreeNode节点):

TreeNode *p;

p->val = 32;

然后编译,报错。

实际上TreeNode *p 仅仅是一个声明,并不是

定义,还没有给(*p)结构体分配空间,所以才

会报错。

正确的定义结构体的一种方式为:

TreeNode *p = new TreeNode;

希望你们不要犯跟我同样的错误。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值