1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
class Node:
def __init__(self, data, href):
self.data = data
self.href = href
self.child = []
self.parent = None
class Tree:
def __init__(self):
self.dummy = Node('dummy', None)
self.current = self.dummy
root = Node('/', '/')
root.parent = self.dummy
self.dummy.child.append(root)
self.root = root
def mkdir(self, href):
self.current = self.dummy
word = ''
for c in href:
word += c
if c == '/':
for idx in range(len(self.current.child)):
if self.current.child[idx].data == word:
self.current = self.current.child[idx]
word = ''
break
else:
new_node = Node(word, href)
new_node.parent = self.current
self.current.child.append(new_node)
self.current = new_node
def delete(self, href):
self.current = self.dummy
word = ''
for c in href:
word += c
if c == '/':
for idx in range(len(self.current.child)):
if self.current.child[idx].data == word:
self.current = self.current.child[idx]
word = ''
break
delete_name = self.current.data
self.current = self.current.parent
for idx in range(len(self.current.child)):
if self.current.child[idx].data == delete_name:
self.current.child.pop(idx)
break
def list(self):
self.current = self.dummy
s = [self.current]
while s:
self.current = s.pop()
for child in self.current.child:
print(child.href)
s.append(child)
tree = Tree()
tree.mkdir('/folder1/')
tree.mkdir('/folder2/')
tree.mkdir('/folder3/')
tree.mkdir('/folder2/folder4/')
print('삭제 전')
tree.list()
print('삭제 후')
tree.delete('/folder2/')
tree.list()
|
현재 보완해야할 점은 child를 list에 담아두어 탐색하는 방식인데 delete함수가 작동할 때 삭제하고자 하는 것과 일치하는 폴더를 찾아 index를 읽어 pop을 한다. 이 부분은 child를 linked list로 구현하면 시간 단축에 기여할 수 있을 것이다.
(Python) Linked List (0) | 2020.02.24 |
---|---|
(Python) 리스트 내포 (0) | 2020.01.13 |
(Python) map()과 lambda (0) | 2020.01.12 |
(Python) 2진법 수 출력 (0) | 2020.01.12 |
(Python) 임의의 여러 줄을 입력받아야 하는 문제, EOF (0) | 2020.01.04 |
댓글 영역