- 博客(5)
- 收藏
- 关注
原创 二叉树的右视图
题目大意:给定一颗二叉树,求该二叉树的右视图,即从右往左看,求能看到的二叉树的结点,比如[1,2,3]看到的是1,3。思路:1)这道题挺有意思,首先得明确,题目的隐含意思就是要求二叉树的每一层的最后一个结点(从左到右)。2)既然二叉树分层次,就需要利用层次遍历遍历二叉树。3)层次遍历二叉树的时候,最重要的内容是知道当前遍历的层哪个是最后一个结点。4) 设置变量记录当前层在遍历队
2015-11-30 19:17:34 3576
原创 判断是否为合法排序二叉树
题目大意:判断二叉树一个数是否为一颗排序二叉树。解题思路:方法有多种,可以先对二叉树进行中序遍历,然后检查得到的遍历结果是否是升序。不过这样做除了遍历二叉树需要的栈以外还需要一个数值来存储遍历结果以及在此遍历结点元素。有一种方法也是利用中序遍历的思想,用一个变量存储上一个结点的值,在每访问一个结点时,判断当前结点的值是否大于上一结点的值。如果成立,则继续遍历二叉树,如果不成立,则返回false
2015-11-18 17:29:41 1455
原创 排序数组构造AVL树
题目大意:假设排序数组中没有重复的元素,利用数组的元素构建一颗平衡二叉树。思路分析:如果直接构造一颗平衡二叉树,代码量会比较大,而且也不容易实现。注意题目的意思,是利用排序数组来构建平衡二叉树。所以,需要好好利用排序的特点。再来看看,一颗平衡二叉树最基本的要求是树种的结点均匀分布,我们可以利用二分查找来解决这个问题。1)取数组的中间位置的元素,作为根节点2)在中间位置元素的左边部分的中
2015-11-18 17:15:21 1693
原创 Rotate List(链表旋转)
这是一道来自Leetcode的题目,如下所示。其中,K可以大于链表的长度,如果大于链表的长度,则旋转的大小就是 size % K。思路:1)遍历链表,求出链表长度size,并得到指向链表末尾结点的指针end;2)设置两个指针pHead和pEnd,一前一后。根据K的大小,pEnd往前走K+1步。之后,两个指针同步移动,直到pEnd==NULL;3)此时,pHead的下一个结点就是
2015-11-02 22:47:30 594
原创 二叉树的深度
求二叉树深度是一个基本的算法,解决的思路如下:1. 根据二叉树的非递归遍历,设置两个记录变量“观察”栈的深度变化:real_depth是栈真正的深度,cur_depth是当前栈的深度。对每个节点进行遍历,如果cur_depth大于real_depth则更新real_depth。2. 利用递归求解。树的深度为其左右子树中较大者的深度加1。思想很好理解,代码也简单。以下代码为递归求解:
2015-11-02 17:43:55 418
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人