Skip to content

Commit f584752

Browse files
authored
Update README.md
update readme
1 parent 3af785b commit f584752

File tree

1 file changed

+239
-1
lines changed

1 file changed

+239
-1
lines changed

README.md

Lines changed: 239 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,239 @@
1-
# iOSInterView
1+
# iOSInterView
2+
3+
## 工程中会包含一些iOS面试中的算法题目,通过objective c来实现
4+
5+
### 二叉树
6+
7+
```/**
8+
* desc: 二叉排序树的创建,每次都要从顶部元素开始遍历,小于其的放在左边,大于的放在右边
9+
*
10+
* params:根结点,node的值
11+
*
12+
*/
13+
+ (BinarySortTree *)binarySortTreeCreate:(NSArray *)tree;
14+
15+
/**
16+
* desc: 先序遍历
17+
*
18+
* params: 根结点,压栈操作的block
19+
*
20+
*/
21+
+ (void)preOrderTraverseTree:(BinarySortTree *)root handler:(void(^)(BinarySortTree *node))handler;
22+
23+
/**
24+
* desc: 中序遍历
25+
*
26+
* params: 根结点,压栈操作的block
27+
*
28+
*/
29+
+ (void)inOrderTraverseTree:(BinarySortTree *)root handler:(void(^)(BinarySortTree *node))handler;
30+
31+
/**
32+
* desc: 后序遍历
33+
*
34+
* params: 根结点,压栈操作的block
35+
*
36+
*/
37+
+ (void)postOrderTraverseTree:(BinarySortTree *)root handler:(void(^)(BinarySortTree *node))handler;
38+
39+
/**
40+
* desc: 层次遍历(广度优先)
41+
*
42+
* params: 根结点,压栈操作的block
43+
*
44+
*/
45+
+ (void)levelTraverseTree:(BinarySortTree *)root handler:(void(^)(BinarySortTree *node))handler;
46+
47+
/**
48+
* desc: 返回二叉树的深度
49+
*
50+
* params: root 跟节点
51+
*
52+
*/
53+
+ (NSInteger)depthOfTree:(BinarySortTree *)root;
54+
55+
/**
56+
* desc: 返回二叉树的宽度
57+
*
58+
* params: root 跟节点
59+
*
60+
*/
61+
+ (NSInteger)widthOfTree:(BinarySortTree *)root;
62+
63+
/**
64+
* desc: 返回二叉树的全部节点数
65+
*
66+
* params: root 跟节点
67+
*
68+
*/
69+
+ (NSInteger)numbersOfNodesInTree:(BinarySortTree *)root;
70+
71+
/**
72+
* desc: 返回二叉树的叶子节点
73+
*
74+
* params: root 跟节点
75+
*
76+
*/
77+
+ (NSInteger)numbersOfLeafsInTree:(BinarySortTree *)root;
78+
79+
/**
80+
* desc: 返回二叉树中某个节点到跟节点的路径
81+
*
82+
* params: root 跟节点,node 指定节点
83+
*
84+
*/
85+
+ (NSMutableArray *)pathOfNodeInTree:(BinarySortTree *)root searchNode:(BinarySortTree *)node;
86+
87+
/**
88+
* desc: 二叉树中两个节点最近的公共父节点
89+
*
90+
* params: root 跟节点,nodeA/nodeB 两节点
91+
*
92+
*/
93+
+ (BinarySortTree *)publicNodeOfTwoNodesIntree:(BinarySortTree *)root nodeA:(BinarySortTree *)nodeA nodeB:(BinarySortTree *)nodeB;
94+
95+
/**
96+
* desc: 二叉树两个节点之间的距离
97+
*
98+
* params: root 跟节点,nodeA/nodeB 两节点
99+
*
100+
*/
101+
+ (NSInteger)distanceOfTwoNodesInTree:(BinarySortTree *)root nodeA:(BinarySortTree *)nodeA nodeB:(BinarySortTree *)nodeB;
102+
103+
/**
104+
* desc: 翻转二叉树
105+
*
106+
* params: root 跟节点
107+
*
108+
*/
109+
+ (BinarySortTree *)invertBinaryTree:(BinarySortTree *)root;
110+
111+
/**
112+
* desc: 判断二叉树是否完全二叉树
113+
*
114+
* params: root 跟节点
115+
*
116+
*/
117+
+ (BOOL)isCompleteBinaryTree:(BinarySortTree *)root;
118+
119+
/**
120+
* desc: 判断二叉树是否满二叉树
121+
*
122+
* params: root 跟节点
123+
*
124+
*/
125+
+ (BOOL)isFullBinaryTree:(BinarySortTree *)root;
126+
127+
/**
128+
* desc: 判断二叉树是否平衡二叉树
129+
*
130+
* params: root 跟节点
131+
*
132+
*/
133+
+ (BOOL)isAVLBinaryTree:(BinarySortTree *)root;
134+
135+
/**
136+
* desc: 返回二叉树第i层节点数
137+
*
138+
* params: root 跟节点,level 层级
139+
*
140+
*/
141+
+ (NSInteger)numbersOfLevelInTree:(BinarySortTree *)root level:(NSInteger)level;
142+
143+
/**
144+
* desc: 二叉排序树插入节点
145+
*
146+
* params:根结点,插入的值
147+
*
148+
*/
149+
+ (BinarySortTree *)insertNodeToTree:(BinarySortTree *)root nodeValue:(NSInteger)value;
150+
151+
/**
152+
* desc: 删除排序二叉树中的节点,三种情况:1.删除节点是叶子结点,2.删除节点只有左/右子树,3.删除节点左右子树都有
153+
*
154+
* params:根结点,插入的值
155+
*
156+
*/
157+
+ (void)deleteNodeInTree:(BinarySortTree *)root deleteNode:(NSInteger)value;
158+
```
159+
160+
### 链表
161+
```
162+
/**
163+
* desc: 打印链表的值,打印不带环的链表,调试用
164+
*
165+
*/
166+
+ (void)printfLinkedList:(LinkedList *)list;
167+
168+
/**
169+
* desc: 创建首尾不相连的单向链表
170+
*
171+
* params: array 构建链表的数组(以数字数组为例)
172+
*
173+
*/
174+
+ (LinkedList *)createNoCircleAndSinglyLinkedList:(NSArray *)array;
175+
176+
/**
177+
* desc: 创建首尾不相连的双向链表
178+
*
179+
* params: array 构建链表的数组(以数字数组为例)
180+
*
181+
*/
182+
+ (LinkedList *)createSinglyLinkedList:(NSArray *)array;
183+
184+
/**
185+
* desc: 创建首尾相连的双向链表
186+
*
187+
* params: array 构建链表的数组(以数字数组为例)
188+
*
189+
*/
190+
+ (LinkedList *)createTwoWayLinkedList:(NSArray *)array;
191+
192+
/**
193+
* desc: 给定一个链表和一个值,对链表进行排序,使得所有小于该值的元素都在左边,大于的都在右边
194+
*
195+
* params: list 链表,val 值
196+
*
197+
*/
198+
+ (LinkedList *)reorderList:(LinkedList *)list value:(NSInteger)val;
199+
200+
/**
201+
* desc: 给定一个链表,返回链表的中间点。双指针法,一个以一倍速前进,一个以二倍速前进
202+
*
203+
* params: list 链表
204+
*
205+
*/
206+
+ (LinkedList *)getMiddleNodeInLinkedList:(LinkedList *)list;
207+
208+
/**
209+
* desc: 找到链表中距离最后一个元素k的那个元素
210+
*
211+
* params: list 链表,k 距离
212+
*
213+
*/
214+
+ (LinkedList *)getKthNodeInLinkedList:(LinkedList *)list distance:(NSInteger)k;
215+
216+
/**
217+
* desc: 给定一个可能包含环的链表,编写一个函数返回环开始的节点,如果不包含返回nil。设置两个指针,一个是单倍速,一个二倍速,如果能够相遇则说明又环,然后使得一个指针指向头节点,然后再次以单倍速前进,相遇点即为环开始的点
218+
*
219+
* params: list 链表
220+
*
221+
*/
222+
+ (LinkedList *)getStartOfCircleInLinkedList:(LinkedList *)list;
223+
224+
/**
225+
* desc: 给定一个链表,向右旋转k个位置,k是非负数,如1>2>3>4>5,k=2,旋转之后为4>5>1>2>3
226+
*
227+
* params: list 链表,k 距离
228+
*
229+
*/
230+
+ (LinkedList *)revertLinkedListWithK:(LinkedList *)list distance:(NSInteger)k;
231+
232+
/**
233+
* desc: 将链表逆转并返回新的链表头
234+
*
235+
* params: list 链表,k 距离
236+
*
237+
*/
238+
+ (LinkedList *)revertLinkedList:(LinkedList *)list;
239+
```

0 commit comments

Comments
 (0)