
获得徽章 3
- 一、C++ map集实现哈希表的原理:见链接;
二、判断一颗二叉树是否是平衡二叉树:平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
实现算法&代码:www.nowcoder.com
展开评论1 - 递归:重复调用函数自身实现循环称为递归;
递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误;但是递归编程所体现的思想正是人们追求简洁、将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机。
迭代:利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环;
迭代大部分时候需要人为的对问题进行剖析,分析问题的规律所在,将问题转变为一次次的迭代来逼近答案。迭代不像递归那样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易的通过循环加以实现。迭代的效率高,但却不太容易理解,当遇到数据结构的设计时,比如图表、二叉树、网格等问题时,使用就比较困难,而是用递归就能省掉人工思考解法的过程,只需要不断的将问题分解直到返回就可以了。展开评论1 - # C++map两篇文章集合:
blog.csdn.net
blog.csdn.net
# C++队列:blog.csdn.net
# C++ set集:blog.csdn.net
blog.csdn.net
展开评论1 - 已知二叉树前序遍历序列与中序遍历序列,构造出原二叉树。
算法思路(数组指针法):
1. 中序遍历序列为主,以指针方式拆分左右子树,以先序遍历为辅,用以找到根结节来区分中序遍历序列左右子树。pre={1,2,4,7,3,5,6,8};vin={4,7,2,1,5,3,8,6}。
2.preStart表示vin中根结节索引(即pre先序遍历结点索引),vinStart与vinEnd表示vin中用根节点隔开的左子树或右子树的起始位置,index表示根节点位置。
3. 每一次的循环体内容(即递归的内容):建立root跟结点,vin分隔左子树:preStart+1至index-1;vin分隔右子树:preStart+index-vinStart+1至inEnd,其中index-inStart+1表示左子树的数量加上当前结点的数量。
4. root.left递归,root.right递归。递归结束条件为inStart>inEnd或者preStart>pre.length-1时返回空结点,之后程序内存栈中将以此回退,返回我们最重要的根结点root。展开评论1 - hashmap底层实现原理是:HashMap是基于哈希表的Map接口的非同步实现。元素以键值对的形式存放,允许null键和null值。HashMap不保证元素存储的顺序,是一种无序的,和放入的顺序并不相同。HashMap的底层实现是数组+链表/红黑树,当链表长度超过8时,会进行树化。put()方法实现原理是将键值对封装成Node对象,通过哈希算法得到数组下标,如果该位置没有元素则直接添加,如果有则遍历链表或树,找到对应的键值对进行覆盖或添加。get()方法实现原理是通过哈希算法得到数组下标,如果该位置没有元素则返回null,如果有则遍历链表或树,找到对应的键值对返回其值。展开评论1