![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
文章平均质量分 65
huixiaowangshu
这个作者很懒,什么都没留下…
展开
-
二叉树的前序遍历6
问题描述:给出一棵二叉树,返回其节点值的前序遍历。 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. 思路: 利用递归的思想。建立一个独立的向量,用于储存遍历过的元素,最终返回向量,可得到二叉树的前序遍历。 前序遍历是先遍历根节点,将根节点原创 2017-04-09 20:43:58 · 197 阅读 · 0 评论 -
二叉树的路径和
问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。 样例 给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3 返回: [ [1, 2, 2], [1, 4] ] 思路: 我们遍历从根节点到叶子的所有路径,定义sum为路径经过原创 2017-04-21 17:08:41 · 353 阅读 · 0 评论 -
二叉树的层次遍历
问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ] 思路:层次遍历的顺序是从上到下,从左到右。本题小的不同是将每层的节点放到一个数组里,再将所有层放到一个空间中原创 2017-04-20 23:12:07 · 314 阅读 · 0 评论 -
子树
问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项:若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。 样例 下面的例子中 T2 是 T1 的子树: 1原创 2017-04-20 22:39:49 · 189 阅读 · 0 评论 -
二叉树的所有路径
问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。 样例 给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5", "1->3" ] 思路:因为返回类型是vector,故需要建立新的函数而且需要将root的val类型转换为string类型,用到函数to_string(int)。原创 2017-04-20 22:03:04 · 152 阅读 · 0 评论 -
把排序数组转换为高度最小的二叉搜索树
问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项There may exist multiple valid solutions, return any of them. 样例 给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \ 1原创 2017-04-19 22:08:08 · 171 阅读 · 0 评论 -
将二叉树拆成链表
问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。 样例 1 \ 1 2 / \ \原创 2017-04-18 22:28:17 · 143 阅读 · 0 评论 -
二叉树的最大节点
问题描述:在二叉树中寻找值最大的节点并返回。 样例 给出如下一棵二叉树: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值为 3 的节点。 思路:建立新的节点temp用来储存遍历的最大的节点。需注意temp为全局变量,要在public中,或使用引用。 用前序遍历遍历所有节点。判断当前节原创 2017-04-17 21:35:56 · 646 阅读 · 0 评论 -
等价二叉树样例 1 1 / \ / \ 2 2 and 2 2 / / 4
问题描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。 样例 1 1 / \ / \ 2 2 and 2 2 / / 4 4 思路:两个二叉树中相同位置有一个是空,另一个非空或者数值原创 2017-04-17 20:41:57 · 164 阅读 · 0 评论 -
翻转链表
问题描述:翻转一棵二叉树。 样例 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 思路:创建新链表temp用来储存root的左子树或右子树,根节点左节点变成右节点,右节点变成左节点。 然后一层层递归下去。 代码:/** * Definition of原创 2017-04-17 20:06:47 · 154 阅读 · 0 评论 -
克隆二叉树
问题描述:深度复制一个二叉树。 给定一个二叉树,返回一个他的 克隆品 。 给定一个二叉树: 1 / \ 2 3 / \ 4 5 返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \ 4 5 思路:建立一个新节点存放当前给出的节点的值,新建的左节点等于给出原创 2017-04-17 19:44:20 · 111 阅读 · 0 评论 -
二叉树的最小深度
问题描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2 思路:递归的思想。求二叉树的最小深度,就到NULL的 时候停止,那么就要原创 2017-04-11 17:22:09 · 114 阅读 · 0 评论 -
二叉树的最大深度
问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最大深度为3. 思路:总体是递归的思想。一步步求出左右子树中最大的深度,再加上上一次的。 代码:/** * Definition of TreeNode: * class Tree原创 2017-04-11 16:32:58 · 128 阅读 · 0 评论 -
二叉树的后序遍历
问题描述:给出一棵二叉树,返回其节点值的后序遍历。 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1] 思路:递归的思想。并用到了向量。 建立向量,储存遍历的元素,最后返回向量。 后序遍历是先访问左子树,后访原创 2017-04-09 21:21:42 · 269 阅读 · 0 评论 -
二叉树的中序遍历
问题描述:给出一棵二叉树,返回其节点值的前序遍历。 思路:与前序遍历相同,利用递归思想。然后建立向量用于储存节点值和返回这个向量。区别是中序遍历是先访问根节点的左子树,后访问根节点,最后为右子树。 左右子树重复上述过程。 代码:/** * Definition of TreeNode: * class TreeNode { * public: *原创 2017-04-09 21:09:36 · 198 阅读 · 0 评论 -
二叉树专题总结
总结:二叉树感触最多的是递归的调用,降低了代码的复杂性,很好的解决了问题。还有二叉树与栈,队列,数组的结合应用。 递归函数看似简单,但需要对问题良好的分析能力。刚开始的前序,中序,后序遍历还是比较简单的,后面的需要结合新的函数共同解决问题。印象很深的是二叉树的所有路 径和判断是否是子树,完全没有思路,在网上搜到答案后觉得不是很难,但是自己没有想出来。了解了这些题,感觉二叉树还是原创 2017-04-21 17:09:56 · 142 阅读 · 0 评论