このページは http://www.slideshare.net/TelerikAcademy/21-trees-and-graphs-c-fundamentals の内容を掲載しています。

掲載を希望されないスライド著者の方は、こちらよりご連絡下さい。

4年以上前 (2012/07/12)にアップロードin学び

This presentation discusses the Trees.

Trees like data structures. Tree and related terminology....

This presentation discusses the Trees.

Trees like data structures. Tree and related terminology.

Traversing through the Tree? What is Balanced Tree? What is Graph data structure?

Telerik Software Academy: http://www.academy.telerik.com

The website and all video materials are in Bulgarian

Tree-like Data Structures

Trees and Related Terminology

Implementing Trees

Traversing Trees

Balanced Trees

Graphs

C# Programming Fundamentals Course @ Telerik Academy

http://academy.telerik.com

- Trees and Graphs

Trees, Binary Search Trees, Balanced Trees,

Graphs

Svetlin Nakov

Manager Technical

ht T

t r

p:a

/ i/ne

w r

ww.nakov.com/

Telerik Software Academy

http://academy.telerik.com/ - Table of Contents

1. Tree-like Data Structures

2. Trees and Related Terminology

3. Implementing Trees

4. Traversing Trees

5. Balanced Trees

6. Graphs

2 - Tree-like Data Structures

Trees, Balanced Trees, Graphs, Networks - Tree-like Data Structures

Tree-like data structures are

Branched recursive data structures

Consisting of nodes

Each node can be connected to other

nodes

Examples of tree-like structures

Trees: binary / other degree, balanced,

etc.

Graphs: directed / undirected,

weighted, etc.

Networks

4 - Tree-like Data Structures

Network

5 (20)

2 5

Tre

1

(1

1

0

0

)

Project

(4

e

)

0)

Manager

5

20(20)

6

(15

3

1

Team

De-

QA Team

15 (30)

5 (5)

Leader

signer

Leader

4

5

Developer

Developer

1

Tester 1

3

Tester 2

Developer

7

1

2

14

4

21

Grap

11

12

19

h

31

5 - Trees and Related

Terminology

Node, Edge, Root, Children, Parent,

Leaf , Binary Search Tree, Balanced

Tree - Trees

Tree data structure – terminology

Node, edge, root, child, children, siblings,

parent, ancestor, descendant, predecessor,

successor, internal node, leaf, depth,

height, subtree

Depth 0

17

Height = 3

Depth 1

9

15

14

6

5

Depth 2

8

7 - Binary Trees

Binary trees: most widespread form

Each node has at most 2 children

Root

node

Right

17

Left

child

subtree

9

15

Right

child

6

5

8

10

Left child

8 - Binary Search Trees

Binary search trees are ordered

For each node x in the tree

All the elements of the left subtree of x

are ≤ x

All the elements of the right subtree of x

are > x

Binary search trees can be balanced

Balanced trees have height of ~ log(x)

Balanced trees have for each node

nearly equal number of nodes in its

subtrees

9 - Binary Search Trees (2)

Example of balanced binary search

tree

17

9

19

6

12

25

If the tree is balanced, add / search / delete

operations take approximately log(n) steps

10 - Implementing Trees

Recursive Tree Data Structure - Recursive Tree Definition

The recursive definition for tree data

structure:

A single node is tree

Tree nodes can have zero or multiple

children that are also trees

Tree node definition in C#

The value

public class TreeNode<T>

{

contained in the

private T value;

node

private List<TreeNode<T>> children;

…

List of child nodes,

}

which are of the

12

same type - TreeNode<int> Structure

List<TreeNode<int>> children

int value

TreeNode<int>

7 children

19 children

21 children

14 children

1 children

31 children

23 children

6 children

12 children

13 - Implementing TreeNode<T>

public TreeNode(T value)

{

this.value = value;

this.children = new List<TreeNode<T>>();

}

public T Value

{

get { return this.value; }

set { this.value = value; }

}

public void AddChild(TreeNode<T> child)

{

child.hasParent = true;

this.children.Add(child);

}

public TreeNode<T> GetChild(int index)

{

return this.children[index];

}

14 - Implementing Tree<T>

The class Tree<T> keeps tree's root

npo

ub d

li e

c class Tree<T>

{

private TreeNode<T> root;

public Tree(T value, params Tree<T>[] children): this(value)

{

foreach (Tree<T> child in children)

{

Flexible

this.root.AddChild(child.root);

constructor for

}

}

building trees

public TreeNode<T> Root

{

get { return this.root; }

}

}

15 - Building a Tree

Constructing tree by nested

constructors:

Tree<int> tree =

new Tree<int>(7,

7

new Tree<int>(19,

new Tree<int>(1),

new Tree<int>(12),

new Tree<int>(31)),

19

21

14

new Tree<int>(21),

new Tree<int>(14,

new Tree<int>(23),

1

12

31

23

6

new Tree<int>(6))

);

16 - Tree Traversals

DFS and BFS Traversals - Tree Traversal Algorithms

Traversing a tree means to visit each of

its nodes exactly one in particular order

Many traversal algorithms are known

Depth-First Search (DFS)

Visit node's successors first

Usually implemented by recursion

Breadth-First Search (BFS)

Nearest nodes visited first

Implemented by a queue

18 - Depth-First Search (DFS)

Depth-First Search first visits all

descendants of given node recursively,

finally visits the node itself

DFS algorithm pseudo code 9

7

DFS(node)

{

4

5

for each child c of node

8

19

21

14

DFS(c);

print the current node;

}

1

2

3

6

7

1

12

31

23

6

19 - DFS in Action (Step 1)

Stack: 7

Output: (empty)

7

19

21

14

1

12

31

23

6

20 - DFS in Action (Step 2)

Stack: 7, 19

Output: (empty)

7

19

21

14

1

12

31

23

6

21 - DFS in Action (Step 3)

Stack: 7, 19, 1

Output: (empty)

7

19

21

14

1

12

31

23

6

22 - DFS in Action (Step 4)

Stack: 7, 19

Output: 1

7

19

21

14

1

12

31

23

6

23 - DFS in Action (Step 5)

Stack: 7, 19, 12

Output: 1

7

19

21

14

1

12

31

23

6

24 - DFS in Action (Step 6)

Stack: 7, 19

Output: 1, 12

7

19

21

14

1

12

31

23

6

25 - DFS in Action (Step 7)

Stack: 7, 19, 31

Output: 1, 12

7

19

21

14

1

12

31

23

6

26 - DFS in Action (Step 8)

Stack: 7, 19

Output: 1, 12, 31

7

19

21

14

1

12

31

23

6

27 - DFS in Action (Step 9)

Stack: 7

Output: 1, 12, 31, 19

7

19

21

14

1

12

31

23

6

28 - DFS in Action (Step 10)

Stack: 7, 21

Output: 1, 12, 31, 19

7

19

21

14

1

12

31

23

6

29 - DFS in Action (Step 11)

Stack: 7

Output: 1, 12, 31, 19, 21

7

19

21

14

1

12

31

23

6

30 - DFS in Action (Step 12)

Stack: 7, 14

Output: 1, 12, 31, 19, 21

7

19

21

14

1

12

31

23

6

31 - DFS in Action (Step 13)

Stack: 7, 14, 23

Output: 1, 12, 31, 19, 21

7

19

21

14

1

12

31

23

6

32 - DFS in Action (Step 14)

Stack: 7, 14

Output: 1, 12, 31, 19, 21, 23

7

19

21

14

1

12

31

23

6

33 - DFS in Action (Step 15)

Stack: 7, 14, 6

Output: 1, 12, 31, 19, 21, 23

7

19

21

14

1

12

31

23

6

34 - DFS in Action (Step 16)

Stack: 7, 14

Output: 1, 12, 31, 19, 21, 23, 6

7

19

21

14

1

12

31

23

6

35 - DFS in Action (Step 17)

Stack: 7

Output: 1, 12, 31, 19, 21, 23, 6, 14

7

19

21

14

1

12

31

23

6

36 - DFS in Action (Step 18)

Stack: (empty)

Output: 1, 12, 31, 19, 21, 23, 6, 14, 7

Traversal

7

finished

19

21

14

1

12

31

23

6

37 - Breadth-First Search

(BFS)

Breadth-First Search first visits the

neighbor nodes, later their neighbors,

etc.

BFS algorithm pseudo code

BFS(node)

1

7

{

queue node

while queue not empty

2

3

4

v queue

19

21

14

print v

for each child c of v

5

6

7

8

9

queue c

1

12

31

23

6

}

38 - BFS in Action (Step 1)

Queue: 7

Output: 7

7

19

21

14

1

12

31

23

6

39 - BFS in Action (Step 2)

Queue: 7, 19

Output: 7

7

19

21

14

1

12

31

23

6

40 - BFS in Action (Step 3)

Queue: 7, 19, 21

Output: 7

7

19

21

14

1

12

31

23

6

41 - BFS in Action (Step 4)

Queue: 7, 19, 21, 14

Output: 7

7

19

21

14

1

12

31

23

6

42 - BFS in Action (Step 5)

Queue: 7, 19, 21, 14

Output: 7, 19

7

19

21

14

1

12

31

23

6

43 - BFS in Action (Step 6)

Queue: 7, 19, 21, 14, 1

Output: 7, 19

7

19

21

14

1

12

31

23

6

44 - BFS in Action (Step 7)

Queue: 7, 19, 21, 14, 1, 12

Output: 7, 19

7

19

21

14

1

12

31

23

6

45 - BFS in Action (Step 8)

Queue: 7, 19, 21, 14, 1, 12, 31

Output: 7, 19

7

19

21

14

1

12

31

23

6

46 - BFS in Action (Step 9)

Queue: 7, 19, 21, 14, 1, 12, 31

Output: 7, 19, 21

7

19

21

14

1

12

31

23

6

47 - BFS in Action (Step 10)

Queue: 7, 19, 21, 14, 1, 12, 31

Output: 7, 19, 21, 14

7

19

21

14

1

12

31

23

6

48 - BFS in Action (Step 11)

Queue: 7, 19, 21, 14, 1, 12, 31, 23

Output: 7, 19, 21, 14

7

19

21

14

1

12

31

23

6

49 - BFS in Action (Step 12)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14

7

19

21

14

1

12

31

23

6

50 - BFS in Action (Step 13)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14, 1

7

19

21

14

1

12

31

23

6

51 - BFS in Action (Step 14)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14, 1, 12

7

19

21

14

1

12

31

23

6

52 - BFS in Action (Step 15)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14, 1, 12, 31

7

19

21

14

1

12

31

23

6

53 - BFS in Action (Step 16)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14, 1, 12, 31, 23

7

19

21

14

1

12

31

23

6

54 - BFS in Action (Step 16)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14, 1, 12, 31, 23, 6

7

19

21

14

1

12

31

23

6

55 - BFS in Action (Step 17)

Queue: 7, 19, 21, 14, 1, 12, 31, 23, 6

Output: 7, 19, 21, 14, 1, 12, 31, 23, 6 The

queue

is

7

empty

stop

19

21

14

1

12

31

23

6

56 - Binary Trees DFS

Traversals

DFS traversal of binary trees can be

done in pre-order, in-order and post-

order

17

9

19

6

12

25

Pre-order: root, left, right 17, 9, 6, 12, 19,

25

In-order: left, root, right 6, 9, 12, 17, 19, 255

7

Post-order: left, right, root 6, 12, 9, 25, 19,

17 - Iterative DFS and BFS

What will happen if in the Breadth-First

Search (BFS) algorithm a stack is used

instead of queue?

An iterative Depth-First Search (DFS) – in-

BF o

S( r

n d

od e

e r

)

DFS(node)

{

{

queue node

stack node

while queue not empty

while stack not empty

v queue

v stack

print v

print v

for each child c of v

for each child c of v

queue c

stack c

}

}

58 - Trees and Traversals

Live Demo - Balanced Search Trees

AVL Trees, B-Trees, Red-Black Trees, AA-

Trees - Balanced Binary Search

Trees

Ordered Binary Trees (Binary Search

Trees)

For each node x the left subtree has

values ≤ x and the right subtree has

values > x

Balanced Trees

For each node its subtrees contain

nearly equal number of nodes nearly

the same height

Balanced Binary Search Trees

Ordered binary search trees that have

height of log (n) where n is the number 61

2

of their nodes

Searching costs about log (n)

2

comparisons - Balanced Binary Search

Tree – Example

33

18

54

15

24

42

60

3

17

20

29

37

43

59

85

62 - Balanced Binary Search

Trees

Balanced binary search trees are hard to

implement

Rebalancing the tree after insert / delete is

complex

Well known implementations of balanced

binary search trees

AVL trees – ideally balanced, very complex

Red-black trees – roughly balanced, more

simple

AA-Trees – relatively simple to implement

Find / insert / delete operations need

log(n) steps

63 - B-Trees

B-trees are generalization of the

concept of ordered binary search trees

B-tree of order d has between d and 2*d

keys in a node and between d+1 and

2*d+1 child nodes

The keys in each node are ordered

increasingly

All keys in a child node have values

between their left and right parent keys

If the b-tree is balanced, its search /

insert / add operations take about

log(n) steps

64

B-trees can be efficiently stored on the

disk - B-Tree – Example

B-Tree of order 2 (also known as 2-3-4-

tree):

17 21

7 11

18 20

26 31

2 4 5 6

8 9

12 16

22 23 25

27 29 30

32 35

65 - Balanced Trees in .NET

.NET Framework has several built-in

implementations of balanced search

trees:

SortedDictionary<K,V>

Red-black tree based map of key-value

pairs

OrderedSet<T>

Red-black tree based set of elements

External libraries like "Wintellect Power

Collections for .NET" are more flexible

http://powercollections.codeplex.com

66 - Graphs

Definitions, Representation, Traversal

Algorithms - Graph Data Structure

Set of nodes with many-to-many

relationship between them is called graph

Each node has multiple predecessors

Each node has multiple successors

Node

Node with

with

multiple

multiple

7

predecessors

successo

1

14

rs

4

21

11

12

19

31

68 - Graph Definitions

Node (vertex)

Element of graph

Node

Can have name or value

A

Keeps a list of adjacent nodes

Edge

Connection between two nodes

Edge

Can be directed / undirected

Can be weighted / unweighted

A

B

Can have name / value

69 - Graph Definitions (2)

Directed graph

Undirected graph

Edges have

Undirected edges

direction

22

2

3

A

F

7

J

1

4

D

G

21

12

E

19

C

H

3

70 - Graph Definitions (3)

Weighted graph

Weight (cost) is associated with each

edge

10

A

F

4

5

N

6

J

16

8

Q

D

7

22

9

G

3

E

14

K

C

H

71 - Graph Definitions (4)

Path (in undirected graph)

Sequence of nodes n , n , … n

1

2

k

Edge exists between each pair of nodes

n , n

i

i+1

Examples:

A, B, C is a path

B

C

H, K, C is not a path

A

G

K

H

N

72 - Graph Definitions (5)

Path (in directed graph)

Sequence of nodes n , n , … n

1

2

k

Directed edge exists between each pair

of nodes n , n

i

i+1

Examples:

A, B, C is a path

B

C

A, G, K is not a path

A

G

K

H

N

73 - Graph Definitions (6)

Cycle

Path that ends back at the starting node

Example:

A, B, C, G, A

Simple path

B

C

No cycles in path

Acyclic graph

A

G

K

Graph with no cycles

Acyclic undirected graphs a

H re treesN

74 - Graph Definitions (7)

Two nodes are reachable if Unconnecte

d graph with

Path exists between them

two

Connected graph

connected

components

Every node is reachable from any other

node

Connected graph

A

F

J

A

F

J

D

G

D

G

E

C

H

75 - Graphs and Their

Applications

Graphs have many real-world

applications

Modeling a computer network like

Internet

Routes are simple paths in the network

Modeling a city map

Streets are edges, crossings are vertices

Social networks

People are nodes and their connections

are edges

State machines

States are nodes, transitions are edges

76 - Representing Graphs

Adjacency list

1 {2, 4}

Each node holds a

3

2

2 {3}

list of its

3 {1}

4 {2}

neighbors

1

4

Adjacency matrix

1

2

3

4

1

0

1

0

1

Each cell keeps

2

0

0

1

0

whether and how

3

1

0

0

0

two nodes are

4

0

1

0

0

connected

{1,2} {1,4} {2,3} {3,1} {4,2}

Set of edges

77 - Representing Graphs in

C#

public class Graph

0

{

6

int[][] childNodes;

3

public Graph(int[][] nodes)

1

{

this.childNodes = nodes;

4

5

}

}

2

Graph g = new Graph(new int[][] {

new int[] {3, 6}, // successors of vertice 0

new int[] {2, 3, 4, 5, 6}, // successors of vertice 1

new int[] {1, 4, 5}, // successors of vertice 2

new int[] {0, 1, 5}, // successors of vertice 3

new int[] {1, 2, 6}, // successors of vertice 4

new int[] {1, 2, 3}, // successors of vertice 5

new int[] {0, 1, 4} // successors of vertice 6

});

78 - Graph Traversal

Algorithms

Depth-First Search (DFS) and Breadth-

First Search (BFS) can traverse graphs

Each vertex should be is visited at most

once

BFS(node)

DFS(node)

{

{

queue node

stack node

visited[node] = true

visited[node] = true

while queue not empty

while stack not empty

v queue

v stack

print v

print v

for each child c of v

for each child c of v

if not visited[c]

if not visited[c]

queue c

stack c

visited[c] = true

visited[c] = true

}

}

79 - Recursive DFS Graph

Traversal

void TraverseDFSRecursive(node)

{

if (not visited[node])

{

visited[node] = true

print node

foreach child node c of node

{

TraverseDFSRecursive(c);

}

}

}

vois Main()

{

TraverseDFS(firstNode);

}

80 - Graphs and Traversals

Live Demo - Summary

Trees are recursive data structure – node

with set of children which are also nodes

Binary Search Trees are ordered binary

trees

Balanced trees have weight of log(n)

Graphs are sets of nodes with many-to-

many relationship between them

Can be directed/undirected, weighted /

unweighted, connected / not connected,

etc.

Tree / graph traversals can be done by

Depth-First Search (DFS) and Breadth-

82

First Search (BFS) - Trees and Graphs

?

?

?

?

?

?

?

?

?

?

Questions? ?

?

?

?

?

?

?

?

?

курсове и уроци по програмиране, уеб дизайн

BG–

бе

Codeзпл

r - о ат

нл но

айн състезателна система - online judge

курсове и уроци по програмиране – Те

ф

лер ору

ик м п

ака рог

де

ра

мия миране, форум уеб дизайн

уроци по програмиране и уеб дизайн за

ASP. уче

NET

ни

ку

ци

рс - уеб програмиране, бази данни, C#, .NET, ASP.NET

програмиране за деца – безплатни курсове и уроци

ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен SEO курс - оптимизация

ал за

го т

а ър

ка сач

дем ки

ия – състезателно програмиране, състезания

курсове и уроци по програмиране, книги – безплатно от Наков

курс мобилни приложения с iPhone, Android, WP7, PhoneGap

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

Дончо Минков - сайт за програмиране

free C# book, безплатна книга C#, книга Java, книга C#

http://academy.telerik

безплатен курс "Качествен програм

Н

ен

ико

код

лай "

Костов - блог за програмиране

безплатен курс "Разработка на софтуер в cl

Cou

# d сре

кур

да"

с, програмиране, безплатно

.com/ - Exercises

1. Write a program to traverse the directory

C:\WINDOWS and all its subdirectories

recursively and to display all files matching

the mask *.exe. Use the class

System.IO.Directory.

2. Define classes File { string name, int size }

and Folder { string name, File[] files, Folder[]

childFolders } and using them build a tree

keeping all files and folders on the hard

drive starting from C:\WINDOWS. Implement a

method that calculates the sum of the file

sizes in given subtree of the tree and test it

accordingly. Use recursive DFS traversal.

84 - Exercises (2)

3. Implement the recursive Depth-First-Search

(DFS) traversal algorithm. Test it with the

sample graph from the demonstrations.

4. Implement the queue-based Breath-First-

Search (BFS) traversal algorithm. Test it with

the sample graph from the demonstrations.

5. Write a program for finding all cycles in

given undirected graph using recursive DFS.

6. Write a program for finding all connected

components of given undirected graph. Use

a sequence of DFS traversals.

85 - Exercises (3)

7.

Write a program for finding the shortest

path between two vertices in a weighted

directed graph. Hint: Use the

Dijkstra's algorithm.

8.

We are given a set of N tasks that should be

executed in a sequence. Some of the tasks

depend on other tasks. We are given a list

of tasks { t , t } where t depends on the

i

j

j

result of t and should be executed after it.

i

Write a program that arranges the tasks in a

sequence so that each task depending on

another task is executed after it. If such

arrangement is impossible indicate this fact.86

Example: {1, 2}, {2, 5}, {2, 4}, {3, 1} 3, 1, 2,

5, 4 - Free Trainings @ Telerik

Academy

Fundamentals of C# Programming

Course

csharpfundamentals.telerik.com

Telerik Software Academy

academy.telerik.com

Telerik Academy @ Facebook

facebook.com/TelerikAcademy

Telerik Software Academy Forums

forums.academy.telerik.com