LeetCode100.相同的树(C语言)(遍历二叉树递归&&非递归)

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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值