剑指offer——二叉树
Cristal_tina
这个作者很懒,什么都没留下…
展开
-
剑指offer——二叉搜索树与双向链表
1. 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。2. 题目分析 二叉搜索树的性质:左子树小于根节点,右子树大于根节点。所以,将二叉搜索树转换成一个排序的双向列表,即从头至尾的顺序为:左子树、根节点、右子树。 但是要特别注意的是,在双向链表中,第一个元素也是有指向前一个元素的指针的,只不过是nullptr,所以原创 2017-08-14 15:13:58 · 264 阅读 · 0 评论 -
剑指offer——按之字形顺序打印二叉树
1. 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。2. 题目分析 开始分析这道题时,我们先画出一个二叉树做示例就能看的比较清楚了。也就是奇数行是从左至右,偶数行是从右至左。 我们定义两个栈,stack1存储奇数行,stack2存储偶数行。现将根节点压入stack1,然后将其左右节点原创 2017-08-16 17:26:18 · 237 阅读 · 0 评论 -
剑指offer——对称的二叉树
1. 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。2. 题目分析 根据题目描述,首先要明确二叉树的镜像的定义。镜像二叉树,就是将原二叉树的左右子树进行交换。那么对称二叉树,就是一颗二叉树的镜像树和他本身相等。镜像后,二叉树的左子树变成右子树,右子树变成左子树树了。要对比原二叉树的左子树和镜像树的右子树,及原二叉树的右子树原创 2017-08-16 16:06:40 · 225 阅读 · 0 评论 -
剑指offer——平衡二叉树
1. 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。2. 题目分析 平衡二叉树,即左右子树高度差不超过一的二叉树。所以,判断一个二叉树是否是平衡二叉树,就要求取其左右子树的高度。所以本题中需要使用一个辅助函数来求取树的高度(深度)。3. 题目解答——cppclass Solution { public: bool IsBalanced_Solution(TreeNode* pR原创 2017-08-16 15:18:37 · 280 阅读 · 0 评论 -
剑指offer——二叉树的深度
1. 题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。2. 题目分析 顾名思义,即求取二叉树的深度。这是一个典型的递归题,可能是剑指里面最简单的题目了。我们将树的叶子节点的左右NULL节点填满,则NULL节点的深度为零,叶子节点的深度为一。使用递归方式,一次求取其父节点的深度,一直求取到root根为止。在求取过程中原创 2017-08-16 15:03:40 · 272 阅读 · 0 评论 -
剑指offer——二叉树的下一个节点
1. 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2. 思路分析 在编写程序之前,先缕清思路。在该题总,应该分不同情况对其进行讨论。 情况一:(鲁棒性)目标节点为空节点时返回ptr; 情况二:目标节点没有父节点且没有右子树时,即该节点就是中序遍历的最后一个元素了,下一个节点为nullptr;原创 2017-08-16 10:40:01 · 269 阅读 · 0 评论 -
剑指offer——重建二叉树
1. 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2. 题目分析2.1 树的重构 根据后序遍历结果和中序遍历结果完成对树的重构大概可整理成以下步骤:由前序遍历的特点可知,前序遍历的第一个元素为根节原创 2017-07-18 14:45:02 · 299 阅读 · 0 评论 -
剑指offer——二叉树的镜像
1. 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 源二叉树: 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \原创 2017-08-10 10:13:44 · 271 阅读 · 0 评论 -
剑指offer——普通二叉树的子结构
1.题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2.解题思路 首先要进行程序的鲁棒性分析: 1. 如果B为空树,那么判断结果为false,因为空树不是任意一棵树的子结构; 2. 如果A为空树,那么判断结果也为false。 如此分析以后,只需对A与B均不是空树的情况进行分析。分析思路如下: 1)判断当前A节点和B树的根节点是否相等原创 2017-08-10 10:25:42 · 319 阅读 · 0 评论 -
剑指offer——从上往下打印二叉树
1. 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。2. 题目分析 本道题目的思路就是定义一个容器,存放待打印节点。 1)当前待打印节点为根节点,将根节点放入help容器中。 2)打印help容器中的第一个节点 3)将已经打印过的第一个节点的左右子树一次存入help容器 4)删除刚才已经打印过的第一个节点,此时help容器中的前两个节点就是已打印节点的左右子树 5)一原创 2017-08-13 22:53:06 · 246 阅读 · 0 评论 -
剑指offer——二叉搜索树的后续遍历序列
此文感谢:http://www.cnblogs.com/loongfee/archive/2012/05/05/2484574.html1. 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。2. 题目分析 根据二叉搜索树的后序遍历的特点:序列中最后一个元素应该为二叉搜索树的根,序列前部的所有小于根原创 2017-08-13 23:53:36 · 285 阅读 · 0 评论 -
算法:解救小易
1. 题目描述 有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。 输入描述:原创 2017-09-26 11:15:16 · 818 阅读 · 0 评论