tnode 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tnode.rb +66 -14
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93248f7cb8d5019ed4509edff46e1bc95d8ce593bfaa2f5358fcf87754257144
4
- data.tar.gz: 03bb7c311605111f2c8f8ce93ae698548c942a7bd74db7e18ef0c082bc841212
3
+ metadata.gz: f52869dfb4c53fdadca6d9c6e755d2fb8ef66e41475b3e471e9d09f33cb74462
4
+ data.tar.gz: 1f71819280038ba38163364ea33c886d324bea62d1acde57e6f50fecab813e63
5
5
  SHA512:
6
- metadata.gz: d4c61cb15cb6396dbb67a1e655dfc86ea9b952033b2dfac7a8ba28f089ffaf361bcd3978d2ac62d6e876a98e5283393c495e8c51a5971026d785447557b8ec80
7
- data.tar.gz: 788557d15716a52773be284d3171d0632a353a652a9fcba2cd965df36af064870e9298bd097bbe5e7addbd548d0b5ccb2ca9fba71f3686187a345a667fc054dc
6
+ metadata.gz: 5f842d61c812e901d7cd6b7159b3a2fb531809380568bb4f6f4e46f6d894ad54f2858798db0c2fe27456f622a0fe1e98ddcc5217e36920ea068d0316c3c9a2df
7
+ data.tar.gz: 5fa7312391ea9971b301a761c1e20602d478f5fc443b2a820afe682e48a9a622b6f538276d176fd0ac350f20118ff3c8145e8aac4fa3efdd066b7e7b2228c432
data/lib/tnode.rb CHANGED
@@ -1,43 +1,70 @@
1
1
  class Tnode
2
- attr_accessor :data, :links
2
+ attr_accessor :data, :links, :trav_links
3
3
 
4
4
  def initialize(data)
5
5
  @data = data
6
6
  @links = []
7
+ @trav_links = []
7
8
  end
8
9
 
9
10
  def insert(data)
10
- @links << Tnode.new(data)
11
+ new_node = Tnode.new(data)
12
+ @links << new_node
13
+ new_node.links << self
14
+ end
15
+
16
+ def init_trav_links
17
+ re_init_trav_links(nil)
18
+ end
19
+
20
+ def re_init_trav_links(parent)
21
+ @trav_links = links.clone
22
+ trav_links.delete(parent)
23
+ trav_links.each do |child|
24
+ child.trav_links.delete(self)
25
+ child.re_init_trav_links(self)
26
+ end
11
27
  end
12
28
 
13
29
  def traverse_dfs
30
+ init_trav_links
31
+ re_traverse_dfs
32
+ end
33
+
34
+ def re_traverse_dfs
14
35
  traverse_dfs_arr = [data]
15
- unless links.empty?
16
- links.each do |child|
17
- traverse_dfs_arr += child.traverse_dfs
36
+ unless trav_links.empty?
37
+ trav_links.each do |child|
38
+ traverse_dfs_arr += child.re_traverse_dfs
18
39
  end
19
40
  end
20
41
  traverse_dfs_arr
21
42
  end
22
43
 
23
44
  def traverse_bfs
45
+ init_trav_links
24
46
  traverse_bfs_arr = [data]
25
- @traverse_bfs_q = links.clone
47
+ @traverse_bfs_q = trav_links.clone
26
48
  until @traverse_bfs_q.empty?
27
49
  traverse_bfs_arr << @traverse_bfs_q.first.data
28
- @traverse_bfs_q += @traverse_bfs_q.shift.links
50
+ @traverse_bfs_q += @traverse_bfs_q.shift.trav_links
29
51
  end
30
52
  traverse_bfs_arr
31
53
  end
32
54
 
33
55
  def tree_find(key_data)
56
+ init_trav_links
57
+ re_tree_find(key_data)
58
+ end
59
+
60
+ def re_tree_find(key_data)
34
61
  target_node = nil
35
62
  if key_data == data
36
63
  return self
37
64
  else
38
- unless links.empty?
39
- links.each do |child|
40
- target_node = child.tree_find(key_data)
65
+ unless trav_links.empty?
66
+ trav_links.each do |child|
67
+ target_node = child.re_tree_find(key_data)
41
68
  return target_node unless target_node.nil?
42
69
  end
43
70
  end
@@ -47,21 +74,46 @@ class Tnode
47
74
  end
48
75
 
49
76
  def remove_node(key_data)
50
- links.each do |child|
77
+ init_trav_links
78
+ re_remove_node(key_data)
79
+ end
80
+
81
+ def re_remove_node(key_data)
82
+ trav_links.each do |child|
51
83
  if child.data == key_data
52
84
  links.delete(child)
53
85
  return
54
86
  else
55
- child.remove_node(key_data)
87
+ child.re_remove_node(key_data)
56
88
  end
57
89
  end
58
90
  end
59
91
 
60
- def tree_apart(tnode)
61
- traverse.intersection(tnode.traverse).empty?
92
+ def apart?(another)
93
+ traverse_dfs.intersection(another.traverse_dfs).empty?
94
+ end
95
+
96
+ def tree_inter(another)
97
+ traverse_dfs.intersection(another.traverse_dfs)
62
98
  end
63
99
 
64
100
  def insert_under(key_data, data)
65
101
  tree_find(key_data).insert(data)
66
102
  end
103
+
104
+ def insert_tnode_under(key_data, newnode)
105
+ tree_find(key_data).links << newnode
106
+ newnode.links << tree_find(key_data)
107
+ end
108
+
109
+ def merge(another)
110
+ internodes = tree_inter(another)
111
+ if internodes.count == 1
112
+ another.tree_find(internodes.first).data = nil
113
+ another.tree_find(nil).links.each do |child|
114
+ child.remove_node(nil)
115
+ insert_tnode_under(internodes.first, child)
116
+ end
117
+ end
118
+ end
67
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tnode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rurika Misaka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-09 00:00:00.000000000 Z
11
+ date: 2022-06-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: My data structure homework
14
14
  email: goblinmaiden1931@gmail.com