
二叉树—简单
布丁咩咩
这个作者很懒,什么都没留下…
展开
-
二叉树的前序遍历
1.问题描述:给出一棵二叉树,返回其节点值的前序遍历。2.思路:正如给定样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,2,3].应该建立一个向量用于储存遍历过的节点,最终再返回这个向量,即可得到该二叉树的前序遍历。前序遍历为先访问树的根节点再按前序遍历的方式访问树的左子树、右子树。 3.代码:/原创 2017-04-08 11:12:00 · 288 阅读 · 0 评论 -
二叉树的路径和
1.问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径2.思路:遍历二叉树的所有路径,并储存在vector中,如果和等于目标值,则返回这个vector。3.代码:/** * Definition of TreeNode: * class TreeNode { * public: * int原创 2017-04-21 16:34:23 · 177 阅读 · 0 评论 -
二叉树的所有路径
1.问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。2.思路:正如样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"] 如果左子树右子树都为空则把根节点储存在向量中,然而如果左子树不为空则对左子树调用递归函数,如果右子树不为空则对右子树调用递归函数,最后返回向原创 2017-04-21 15:51:06 · 210 阅读 · 0 评论 -
子树
1.问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定T2 是否为 T1的子树。2.思路:样例下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 / 4下面原创 2017-04-20 23:08:41 · 191 阅读 · 0 评论 -
把排序数组转换为高度最小的二叉搜索树
1.问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项There may exist multiple valid solutions, return any of them.2.思路:样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7原创 2017-04-20 16:52:35 · 345 阅读 · 0 评论 -
将二叉树拆成链表
1.问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的right指针,来表示链表中的next指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。2.思路:正如样例 1 \ 1 2 / \ \原创 2017-04-19 22:44:31 · 209 阅读 · 0 评论 -
翻转二叉树
1.问题描述:翻转一棵二叉树。2.思路:正如样例 1 1 / \ / \2 3 => 3 2 / \ 4 4利用递归的思想交换左右节点,一层一层的往下遍历。3.代码:/** * Definition of TreeNode: * class TreeNode { * public: *原创 2017-04-13 22:28:46 · 180 阅读 · 0 评论 -
二叉树的最大节点
1.问题描述:在二叉树中寻找节点最大的值并返回。2.思路:正如样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。在函数外定义一个很小的数和树中的一个指针(一定要在函数外定义!不然就始终是与这个数进行比较啦),然后再在树中遍历,并将节点值与x(不断更新)进行比较,找出节点最大的值,原创 2017-04-13 22:16:17 · 491 阅读 · 0 评论 -
二叉树的最小深度
1.问题描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。2.思路:正如样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2利用递归的思想,不断求左右子树的最小深度,两者中最小的+1即为该二叉树原创 2017-04-13 21:57:34 · 210 阅读 · 0 评论 -
克隆二叉树
1.问题描述:深度复制一个二叉树。给定一个二叉树,返回他的一个克隆品。2.思路:正如样例给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5 建立一个新的二叉树,它的根节点为原二叉树的根节点,再用克隆的函数遍历原二叉树的左子树和右子树原创 2017-04-17 22:03:49 · 590 阅读 · 0 评论 -
等价二叉树
1.问题描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。2.思路:正如样例 1 1 / \ / \ 2 2 and 2 2 / /4 4就是两棵等价的二叉树。 1原创 2017-04-17 21:52:27 · 197 阅读 · 0 评论 -
二叉树的最大深度
1.问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。2.思路:正如样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3 利用递归的思想,不断求左右子树的深度,最终最大的那个+1就是给定二叉树的最大深度。3.代码:/** * Definition of TreeNode:原创 2017-04-11 17:03:03 · 185 阅读 · 0 评论 -
二叉树的层次遍历
1.问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)2.思路:正如样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]首先定义两个向量,一个用于储存每一层的节点(f),一个用于储存分层遍历的结果(w).再定义一个原创 2017-04-09 22:24:28 · 1263 阅读 · 0 评论 -
二叉树的中序遍历
1.问题描述:给出一棵二叉树,返回其中序遍历、2.思路:正如样例给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2]. 要定义一个向量储存中序遍历的节点值,最终返回这个向量,即可得到该二叉树的中序遍历。二叉树的中序遍历为按中序遍历的方式访问根的左子树,访问根,按中序遍历的方式访问根的右子树。3.代码:/原创 2017-04-08 11:27:53 · 389 阅读 · 0 评论 -
二叉树的后序遍历
1.问题描述:给出一棵二叉树,返回其节点值的后序遍历。2.思路:例如样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]在函数外建立一个向量用于储存遍历的节点,最后返回这个向量即可得到二叉树节点值的后序遍历。后序遍历是先访问根的左子树再访问根再访问右子树。3.代码/** * Definition原创 2017-04-08 14:13:22 · 246 阅读 · 0 评论 -
二叉树专题总结
感想:这一专题用的最多的就是遍历和递归函数。尤其是递归函数。我一开始对递归函数不是很明白,觉得它没有循环并不能完成整个二叉树的遍历,后来通过这些题目加深了对递归函数的用法也觉得递归函数真是大大简化了程序。我前面写的几个程序比如二叉树的前别人代码能看明白的,中后序遍历,翻转等价克隆二叉树还有最大节点最小节点,最大深度最小深度 都是自己能想的出来或者通过看别人代码能看明白的。但是后面那几个程序我就觉得原创 2017-04-21 16:51:49 · 235 阅读 · 0 评论