活跃农民
- 积分
- 398
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-1-9
- 最后登录
- 1970-1-1
|
2017年3月21日。652;662
除了一道不喜欢的题,今天算是把Tree下面的easy和medium都刷完啦,明天开始刷Two Pointers。下面是关于tree的一些总结:
总结
1.Tree的分类。(1)普通的数;(2)completed Tree:除了最后一层,所有的父节点都有两个子节点。相关的题是计算节点个数。技巧是:先计算出来height,然后将问题分解:父节点+左subtree节点个数+右subtree节点个数==》可以通过比较左右的height,来判断其是否为perfect Tree。若perfect tree的高度为n,则其节点个数为:1+2+4+8+。。2^(n-1)=2^n-1=(1<<n)-1. (3)Binary search Tree:Morris Traveral的方法可以使BST变为root为最小,依次连接右节点,值依次变大。
2. Tree的遍历方法:(1)recursion;(2)DFS:定义stack;(3)BFS:定义queue
3. Tree遍历的次序:Inorder Traversal:left->root->right. Preorder Traversal: root->left->right; postTraversal: left->right->root;
4. tree分层遍历的方法:定义一个temp=[],先遍历上一层的节点(在一个array,如stack中),然后将子节点放入temp中,等上一层遍历结束后,让stack=temp
5. array在Tree中的应用。一般是stack和queue,用于存储节点进行遍历。同时,array可定义为stack=[(node,other information)],other information可以为sum相关值、node的父节点、或者node之前的路径及路径个数、或者node的level等等。
6. hashtable在Tree中的应用。如hashtable={node:[node.parent]}
7. Tree的每个节点位置特点。假设父节点的位置为P,则左子节点的位置为P*2,右子节点的位置为P*2+1。一层的距离为P(mostright)-P(mostleft)+1
其他:
1. 寻找元素位置:n=inorder.index(item),其中inorder为array;
2. maxfre=max(hashtable.values()))。注意hashtable.values()和hashtable.items().
3.count = collections.Counter(),与hashtable相比,count不用判断值是否存在与count中,可直接count[item]+=1.
4. A.strip('!')=> 用于移除字符串头尾指定的字符(默认为空格) a.split('!')==>通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
5.定义无限小:maxnum=float('-inf')
6. sorted_dic=sorted(dic.items(),key=lambda x:(-x[1],x[0]),reverse=False)==>sorted_dic为set
7. temp=[2,5,1,6],若令L=temp,则temp改变时,L也将随着改变。L[0::]=temp[0::],此时,temp改变时,L不会改变。 |
|