摘要:
转自:http://zhedahht.blog.163.com/blog/static/25411174201142733927831/ 题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 在本系列博客的第27题,我们曾介绍过如何求二叉树的深度。有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度,如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二叉树。这种思路对应的代码如下: 1 bool Is. 阅读全文
摘要:
http://zhedahht.blog.163.com/blog/static/2541117420116135376632/ 题目:在数组中,数字减去它右边的数字得到一个数对之差,求所有数对之差的最大值,如数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 分析:看到这个题目,很多人的第一反应是找到这个数组的最大值和最小值,然后觉得最大值减去最小值就是最终的结果。这种思路忽略了题目中很重要的一点:数对之差是一个数字减去它右边的数字。由于我们无法保证最大值一定位于数组的左边,因此这个思路不管用。 于是我们接下来可以想到让每一个数字逐个减. 阅读全文
摘要:
内存管理是一个比较繁琐的问题,C++中有两个实现方案:垃圾回收机制、智能指针。一个智能指针就是一个C++的对象,这对象的行为像一个指针,但是它却可以在其不需要的时候(不是一个精确的定义,如:局部变量退出函数作用域、类的对象被析构...等)自动删除。注意:(1)声明一个智能指针时要立即给它实例化,且一定不能手动释放它;(2)..._ptr<T>不是T*类型,所以声明时要..._ptr<T>而不是...ptr<T*>,不能把T*型的指针赋值给它,且不能些ptr=NULL,而用ptr.reset()代替;(3)不能循环引用;(4)不要声明临时的shared_ptr 阅读全文