您的位置:首页 > 编程语言 > C语言/C++

LeetCode100.相同的树(C语言)

2020-03-31 19:32 761 查看

LeetCode100.相同的树(C语言)

给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:
1 1
/ \ /
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入:
1 1
/
2 2
[1,2], [1,null,2]
输出: false
示例 3:
输入:
1 1
/ \ /
2 1 1 2
[1,2,1], [1,1,2]
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/same-tree

思路:其实这题就是关于二叉树的遍历

方法一:递归实现(dfs)
先上代码

/**
* Definition for a binary tree node.
* 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 (isSameTree(p->left,q->left)&&isSameTree(p->right,q->right));
}
else
return false;
}

思路:如果p和q两者均不为null且p的值和q的值不相等,则递归判断p的左子树是否和q的左子树相等,p的右子树是否和q的右子树相等,只有两者都相等时,才返回true。

递归方法的代码比较简洁
方法二:非递归(队列实现,bfs)
上代码:

```c
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
struct TreeNode* que[500];
int head=0,tail=0;
que[tail++]=p;
que[tail++]=q;
while(head<tail)
{
struct TreeNode*x=que[head++];
struct TreeNode*y=que[head++];
if(x==NULL&&y==NULL)
continue;
if(x==NULL||y==NULL||x->val!=y->val)
return false;
if(x->left!=NULL||y->left!=NULL)
{
que[tail++]=x->left;
que[tail++]=y->left;
}
if(x->right!=NULL||y->right!=NULL)
{
que[tail++]=x->right;
que[tail++]=y->right;
}
}
return true;
}

思路:用队列的话,对二叉树实现的就是从上至下的 逐层遍历
其中最主要的还是要理解其中的入队和出队的顺序等操作

  • 点赞
  • 收藏
  • 分享
  • 文章举报
铜镜映无邪咋马尾 发布了2 篇原创文章 · 获赞 0 · 访问量 23 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: