1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 1 T A B F D 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H 帰りがけ順: D I J F B G H C A C I G J H 2 (1/3) 60 40 80 50 70 30 90 20 100 0 10 5 15 40 60 80 60 40 50 60 30 40 50 80 40 60 70 80 90 20 30 50 70 80 90 2 (2/3) 60 40 80 50 70 30 90 20 100 0 10 5 15 40 60 80 20 30 50 70 90 100 60 40 0 20 30 80 50 70 90 100 2 (3/3) 60 40 80 50 70 30 90 20 100 0 10 5 15 60 20 40 0 5 10 30 80 50 70 90 100 60 5 20 40 0 10 15 80 30 50 70 90 100 3 (1/8) 20 5 30 10 20 60 10 5 70 30 50 15 25 35 45 55 65 75 3 (2/8) 20 5 30 10 25 60 10 5 70 30 50 15 20 35 45 55 65 75 3 (3/8) 20 5 30 10 25 60 10 5 70 30 50 15 35 45 55 65 75 3 (4/8) 20 5 30 10 25 60 10 5 70 35 50 15 30 45 55 65 75 3 (5/8) 20 5 30 10 35 60 10 25 5 15 70 50 30 55 45 65 75 35 60 10 25 15 70 50 30 45 55 65 75 3 (6/8) 20 5 30 10 35 60 25 10 15 70 50 30 55 45 65 75 60 25 35 50 10 15 30 45 70 55 65 75 3 (7/8) 20 5 30 10 60 25 35 50 10 15 70 55 45 65 75 60 15 35 50 10 25 45 70 55 65 75 3 (8/8) 20 5 30 10 60 15 35 50 25 70 55 45 65 75 60 35 50 15 25 45 70 55 65 75 4 01: RB-INSERT(T,x) 02: TREE-INSERT(T,x) 03: color [x ] ← RED 04: while x ≠ root [T ] and color [p [x ]] = RED 05: do if p [x ] = left [p [p [x ]]] 06: then y ← right [p [p [x ]]] 07: if color [y ] = RED 08: then <Case 1> 09: else 10: if x = right [p [x ]] 11: then <Case 2> 12: <Case 3> 13: else <“then” clause with “left ” and “right ” swappe 14: color [root [T ]] ← BLACK 4.1 01: RB-INSERT(T,x) 02: TREE-INSERT(T,x) 03: color [x ] ← RED 10 04: while x ≠ root [T ] and color [p [x ]] = RED 05: do if p [x ] = left [p [p [x ]]] 22 06: then y ← right [p [p [x ]]] 07: if color [y ] = RED x 08: then <Case 1> 26 09: else 10: if x = right [p [x ]] 11: then <Case 2> 12: <Case 3> 13: else <“then” clause with “left ” and “right ” swapped> 14: color [root [T ]] ← BLACK 7 05: 挿入したノードの親ノードが祖父ノードの左ノードの時以下の処理をする。 06-08: 親ノードの兄弟ノードが赤ノードならば Case 1 の処理をする。 09-12: 親ノードの兄弟ノードが黒ノードで挿入したノードが親ノードの右ノードならば Case 2 の処理の後 Case 3 の処理をする。挿入したノードが親ノードの左 ノードならば Case 3 の処理をする。 4.2 (1/3) <Case 1> 22 recolor 35 7 10 26 35 7 36 30 22 10 26 36 30 4.2 (2/3) <Case 2> 40 left-rotate 22 42 35 35 7 10 40 26 30 22 36 7 10 42 36 26 30 4.2 (3/3) <Case 3> 40 35 22 7 10 30 right-rotate 42 36 26 35 40 22 7 10 26 30 36 42 5 G(V, E) B A E F G C D 5.1 G(V, E) B A E F G C D 5.1 G(V, E) B A E F G C D 5.2 G(V, E) B A E F G C D 5.3 G(V, E) B G(V, E) A B E A E F F G G C C D D 6 01: Algorithm DFS(G) 02: Input graph G 03: Output labeling of the edges of G 04: as discovery edges and back edges 05: for all u ∈ G.vertices() 06: 07: 08: 09: 10: 11: setLabel(u, UNEXPLORED) for all e ∈ G.edges() setLabel(e, UNEXPLORED) for all v ∈ G.vertices() if getLabel(v) = UNEXPLORED DFS(G, v) 11: Algorithm DFS(G, v) 12: Input graph G and a start vertex v of G 13: Output labeling of the edges of G 14: in the connected component of v 15: as discovery edges and back edges 16: setLabel(v, VISITED) for all e ∈ G.incidentEdges(v) if getLabel(e) = UNEXPLORED w ← opposite(v,e) if getLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) DFS(G, w) else setLabel(e, BACK) 17: 18: 19: 20: 21: 22: 23: 24: 6 01: Algorithm DFS(G) 02: Input graph G 03: Output labeling of the edges of G 04: as discovery edges and back edges 05: for all u ∈ G.vertices() 06: setLabel(u, UNEXPLORED) 07: for all e ∈ G.edges() 08: setLabel(e, UNEXPLORED) 09: for all v ∈ G.vertices() 10: if getLabel(v) = UNEXPLORED 11: DFS(G, v) 17: 18: 19-22: 23-24: 11: Algorithm DFS(G, v) 12: Input graph G and a start vertex v of G 13: Output labeling of the edges of G 14: in the connected component of v 15: as discovery edges and back edges 16: setLabel(v, VISITED) 17: for all e ∈ G.incidentEdges(v) 18: if getLabel(e) = UNEXPLORED 19: w ← opposite(v,e) 20: if getLabel(w) = UNEXPLORED 21: setLabel(e, DISCOVERY) 22: DFS(G, w) 23: else 24: setLabel(e, BACK) 挿入したノードの親ノードが祖父ノードの左ノードの時以下の処理をする。 親ノードの兄弟ノードが赤ノードならば Case 1 の処理をする。 親ノードの兄弟ノードが黒ノードで挿入したノードが親ノードの右ノードならば Case 2 の処理の後 Case 3 の処理をする。挿入したノードが親ノードの左 ノードならば Case 3 の処理をする。
© Copyright 2024 ExpyDoc