LeetCode | 100.相同的树(C语言版)

简介: LeetCode | 100.相同的树(C语言版)

       这次来写一下 LeetCode 的第 100 题,相同的树。

 

题目描述

       题目直接从 LeetCode 上截图过来,题目如下:

       上面的题就是 相同的树 题目的截图,同时 LeetCode 会根据选择的语言给出了一个类的定义或者函数的定义,然后在其中实现 相同的树 的解题过程。这次我使用 C 语言来进行完成。

       C 语言给出的函数定义如下:


aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CZnY5c21vSHd0aGdLV0ZpYzlmYjM0NVY5UjcwVWhJWUZRWlVDb2ljOWlibUJZbUt2Y2ljckJ2U3g5WnM3YTJyUndTd1gzZjdxeWljSjNGZktkMHYzaWNtaGFDdy82NDA.png

       通过函数定义可以看出,isSameTree 函数的参数是两个双向链表,然后返回值是一个布尔类型的值,我们要做的就是把两个树进行遍历比对即可。

问题分析

       从阅读问题来看,题目的参数是两个以链式存储的树型结构,且是一个二叉树。那么要比较两棵树是否相同,就需要遍历二叉树上的每个节点上的值是否相同,相同则为 相同的树,否则就不是 相同的树。

       对于二叉树的遍历,常见的方法有前序遍历、中序遍历、后续遍历和层次遍历,对于层次遍历而言,需要增加额外的数据结构去支持它。因此,我们考虑使用其他三种遍历方式,而我认为使用 前序遍历 比较好。原因是,前序遍历 可以提早的进行节点上存储的值的比较,而 中需遍历 和 后序遍历 是先找到 左节点 上的值进行比较。拿 中序遍历 来说,从 根节点 开始找到最左面的节点进行比较,假如 根节点 的 左子树 是相同的,而 根节点 的值就是不同的,那么就浪费了时间和空间。后序遍历 不但要先遍历左子树,遍历完左子树还要遍历右子树,最后才遍历根,效率会更慢。因此,我选择了 前序遍历 的方式。

      前序遍历 也叫 先根遍历,也就是从树的根节点开始,然后是左子树,再然后是右子树 这样一个顺序。举例如下。

       我在图中画的节点中的值,表示的 前序遍历 的遍历顺序。而不是表示节点中的值。

代码实现

       C 语言的代码如下:

       代码中有了详细的注释,主要就是对二叉树的一个遍历,还有每个节点值的比较,如果节点上的值相同,就继续遍历,如果节点上的值不同,就直接返回 false,所有的节点都相同就返回 true。


       在我写代码的时候,当某个节点的左子树都不存在时,需要继续遍历右子树,而不是直接返回。这一点在逻辑上好理解,但是写代码的时候我还是花费了一点时间。


提交结果

       在写完代码后,点击右下角的 “执行代码”,然后观察 “输出” 和 “预期结果” 是否一致,一致的话就点击 “提交” 按钮。点击 “提交” 按钮后,系统会使用更多的测试用例来测试我们写的函数体,如果所有的测试用例都通过了,那么就会给出 “通过” 的字样,如果没有通过,会给出失败的那一组测试用例,我们可以根据给出的测试用例来继续修改代码。我们的代码提交后的截图如下:

相关文章
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
112 1
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
55 4
|
23天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
44 5
|
1月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
75 16
|
2月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
3月前
|
C语言
数据结构基础详解(C语言):图的基本概念_无向图_有向图_子图_生成树_生成森林_完全图
本文介绍了图的基本概念,包括图的定义、无向图与有向图、简单图与多重图等,并解释了顶点度、路径、连通性等相关术语。此外还讨论了子图、生成树、带权图及几种特殊形态的图,如完全图和树等。通过这些概念,读者可以更好地理解图论的基础知识。
182 8
|
3月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
3月前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
3月前
|
存储 C语言
数据结构基础详解(C语言): 树与二叉树的应用_哈夫曼树与哈夫曼曼编码_并查集_二叉排序树_平衡二叉树
本文详细介绍了树与二叉树的应用,涵盖哈夫曼树与哈夫曼编码、并查集以及二叉排序树等内容。首先讲解了哈夫曼树的构造方法及其在数据压缩中的应用;接着介绍了并查集的基本概念、存储结构及优化方法;随后探讨了二叉排序树的定义、查找、插入和删除操作;最后阐述了平衡二叉树的概念及其在保证树平衡状态下的插入和删除操作。通过本文,读者可以全面了解树与二叉树在实际问题中的应用技巧和优化策略。
|
4月前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
26 3