LeetCode 100. Same Tree 题解

本文介绍了一种算法,用于比较两棵二叉树是否完全相同,包括结构与节点值。通过递归方式验证根节点及左右子树的一致性。
问题描述:

100. Same Tree

 

Given 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.


解题思路:

如果两个树均为空,则返回true,如果一课树非空另一颗为空,则返回false。如果两棵树均为非空,则判断其中根节点是否相同,以及根节点的两棵左右子树是否相同。

代码展示

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p==NULL&&q==NULL)
            return true;
        if(p==NULL&&q!=NULL)
            return false;
        if(p!=NULL&&q==NULL)
            return false;
        //判断父节点是否相等,及其左右子树是否相等 
        return (p->val==q->val)&&(isSameTree(p->left,q->left))&&(isSameTree(p->right,q->right));
        
    }
};




<think>好的,用户想找LeetCode热度前100题目的C++题解。首我需要确认用户的具体需求。用户可能正在准备面试,需要高效的解题方法,或者想通过经典题目提升编程能力。用户提到的“热度排名前100”可能指的是LeetCode官方的热门题目,或者是根据频率统计的高频面试题。 接下来,我需要回忆LeetCode上常见的top 100问题列表。通常这些题目包括两数之和、反转链表、合并区间、最长子串等。不过具体列表可能随时间变化,需要确保信息的最新性。但用户可能不需要最新的,而是普遍认可的热门题目。 然后,用户需要C++的解决方案。我需要确认是否有可靠的资源提供这些题解。比如官方题解、知名博客或GitHub仓库。引用中提到的几个例子,比如引用1、2、3、4都是C++代码,说明站内有相关资源。需要检查这些引用是否覆盖了top 100中的题目。 比如引用1是二进制求和,引用2是旋转数组,引用3是子集II,引用4是每日温度。这些题目可能属于top 100。但需要综合判断是否有足够的覆盖范围。此外,用户可能需要知道如何找到这些题解,比如通过LeetCode的讨论区、官方解答,或者第三方整理。 可能用户不知道如何高效搜索,或者希望直接获得资源链接。因此,我应该建议几种方法:官方题解、GitHub仓库、书籍《剑指Offer》和《程序员面试金典》的C++版本,以及在线学习平台。 同时,用户可能希望了解哪些题目是必须掌握的,比如两数之和、LRU缓存、合并K个排序链表等。需要列出一些典型题目,并说明它们的考察点,帮助用户有针对性地准备。 最后,要确保回答结构清晰,分点列出方法和示例题目,并附上引用来源,如引用中的代码示例。还要提醒用户注意题目列表的动态变化,建议结合多个来源。</think>### LeetCode Top 100 热门题目的 C++ 题解资源 LeetCode 热度排名前 100 的题目通常涵盖高频算法与数据结构问题,以下是获取 C++ 题解的主要途径和相关示例: --- #### **1. 官方题解与讨论区** LeetCode 官方为每道题目提供多种语言的题解(包括 C++),通常标注为“Solution”。例如: - **两数之和**(No. 1):哈希表实现,时间复杂度 $O(n)$[^1]。 - **LRU 缓存**(No. 146):结合哈希表和双向链表实现 $O(1)$ 操作[^2]。 - **合并 K 个升序链表**(No. 23):优队列或分治法优化[^3]。 --- #### **2. GitHub 开源项目** 多个 GitHub 仓库系统整理了 LeetCode 题解,例如: - **LeetCode-CPP**:按题目分类提供 C++ 实现,包含代码注释。 - **LeetCode-Solutions**:部分题目提供多种解法(如动态规划、单调栈)[^4]。 **示例代码片段**(反转链表,No. 206): ```cpp class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *prev = nullptr, *curr = head; while (curr) { ListNode* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } }; ``` --- #### **3. 书籍与在线课程** - **《剑指 Offer》**:C++ 版本涵盖链表、等高频题型[^2]。 - **《程序员面试金典》**:包含字符串操作、动态规划等题目的 C++ 实现。 --- #### **4. 典型题目与考察点** | 题目编号 | 题目名称 | 核心算法 | 相关引用 | |----------|-------------------------|--------------------|-----------| | 3 | 无重复字符的最长子串 | 滑动窗口 | [^1] | | 5 | 最长回文子串 | 动态规划/中心扩展 | | | 15 | 三数之和 | 双指针 | [^3] | | 53 | 最大子数组和 | 动态规划 | | | 70 | 爬楼梯 | 斐波那契数列 | | --- #### **注意事项** - **动态更新**:LeetCode 热门题目列表可能随面试趋势变化,建议结合最新企业题库。 - **复杂度优化**:部分题目需注意 C++ 容器特性(如 `vector` 预分配内存提升性能)。 --- §§ 相关问题 §§ 1. 如何选择 LeetCode 题目的最优解法? 2. 动态规划在 LeetCode 高频题中的应用场景? 3. C++ 中如何实现链表和的通用模板?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值