摘要:
二叉树的中序遍历非递归版本,采用的是wiki百科上的办法。果然简洁,而且和先序有异曲同工之妙,先序只用push右节点,中序只用push中节点。除此之外还有个更改TreeNode加一个visited的bool值的办法就不表了。http://discuss.leetcode.com/questions/23/binary-tree-inorder-traversal这个链接里面有个长长的讨论。后序遍历据说比较难,就先不学了,哪个面试官会这么变态出后序遍历么!!无堆栈版本的遍历也先不学了,有空多写先序和中序,要记熟了。写的时候仍然要看图,不要光背,思路是:1.当前节点一直是要处理的节点;2.不停向左 阅读全文
posted @ 2013-08-15 23:31
阿牧遥
阅读(252)
评论(0)
推荐(0)
摘要:
关于二叉树的遍历讲得最好的还是wiki:http://en.wikipedia.org/wiki/Pre-order_traversal关于非递归版本,主要是在二叉树超级不平衡的情况下,有可能栈溢出。以下是我写得先序遍历非递归版本,应该是对的吧,没实际运行过,其实也不好写... 基本思路是用TreeNode * n去遍历,先左子树往下,完了pop出一个父节点,把自己变成右子树继续。所以Stack里存的其实是父节点的信息。以下是参考wiki百科的版本,栈用的很少,只推右子树。 public class Solution { public ArrayList preorderTraver... 阅读全文
posted @ 2013-08-15 20:46
阿牧遥
阅读(313)
评论(0)
推荐(0)
摘要:
一个单链表,其中除了next指针外,还有一个random指针,指向链表中的任意某个元素。如何复制这样一个链表呢?通过next来复制一条链是很容易的,问题的难点在于如何恰当地设置新链表中的random指针。很容易想到使用Hash表的做法,先依次遍历原链表,每经过一个节点X,开辟一个新节点Y,然后(key=X的地址,value=Y的地址)存入哈希表。第二次再遍历原链表,根据拓扑结构设置新的链表。需要O(n)的空间,时间也是O(n)。如果不使用额外的空间,那么要想在旧链表和新链表的对应节点之间建立联系。就要利用链表中多余的指针。O(n)复杂度,O(1)空间。如图所示,扫描两边即可。需要复制的链表:如 阅读全文
posted @ 2013-08-15 14:57
阿牧遥
阅读(1274)
评论(0)
推荐(0)
摘要:
一、编码规则Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。例:将对ABC进行BASE64编码:1、首先取ABC对应的ASCII码值。A(65)B(66)C(67);2、再取二进制值A(01000001) 阅读全文
posted @ 2013-08-15 14:09
阿牧遥
阅读(241)
评论(0)
推荐(0)

浙公网安备 33010602011771号