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(headval!=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;
}

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

你可能感兴趣的:(LeetCode100.相同的树(C语言))