LeetCode题解:Same Tree

来源:互联网 发布:google翻译 for mac 编辑:程序博客网 时间:2024/04/27 20:35

题目链接:

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;

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





0 0
原创粉丝点击