leetcode-100:相同的树

简介: leetcode-100:相同的树

题目

题目链接

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

解题

方法一:BFS

python解法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not (p or q):
            return True
        if not (p and q):
            return False
        queue_p = collections.deque([p])
        queue_q = collections.deque([q])
        while queue_p and queue_q:
            cur_p = queue_p.popleft()
            cur_q = queue_q.popleft()
            if not (cur_p or cur_q):
                continue
            if not cur_p or not cur_q or cur_p.val!=cur_q.val:
                return False
            queue_p.append(cur_p.left)
            queue_q.append(cur_q.left)
            queue_p.append(cur_p.right)
            queue_q.append(cur_q.right)
        return True

c++解法

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(!(p||q)) return true;
        if(!(p&&q)) return false;
        queue<TreeNode*> queue_p;
        queue<TreeNode*> queue_q;
        queue_p.push(p);
        queue_q.push(q);
        while(!queue_p.empty()&&!queue_q.empty()){
            TreeNode* cur_p=queue_p.front();
            queue_p.pop();
            TreeNode* cur_q=queue_q.front();
            queue_q.pop();
            if(!(cur_p||cur_q)) continue;
            if(!cur_p||!cur_q||cur_p->val!=cur_q->val) return false;
            queue_p.push(cur_p->left);
            queue_q.push(cur_q->left);
            queue_p.push(cur_p->right);
            queue_q.push(cur_q->right);
        }
        return true;
    }
};

与 就行了

!queue_p.empty()&&!queue_q.empty()

如果一个子树为空一个不为空

这里就会返回false;

if(!cur_p||!cur_q||cur_p->val!=cur_q->val) return false;

java写法

class Solution {
    public boolean isSameTree(TreeNode p, 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);
    }
}


相关文章
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
37 4
|
1月前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
18 3
|
4月前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
52 7
|
4月前
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
42 1
|
4月前
|
算法 C语言 C++
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(上)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
33 1
|
4月前
LeetCode———100——相同的树
LeetCode———100——相同的树
|
4月前
力扣337.打家劫舍3(树形dp)
力扣337.打家劫舍3(树形dp)
|
3月前
|
SQL 算法 数据可视化
LeetCode题目99:图解中叙遍历、Morris遍历实现恢复二叉树搜索树【python】
LeetCode题目99:图解中叙遍历、Morris遍历实现恢复二叉树搜索树【python】
|
3月前
|
存储 SQL 算法
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
|
3月前
|
存储 算法 数据可视化
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
python多种算法对比图解实现 验证二叉树搜索树【力扣98】