-
-
Notifications
You must be signed in to change notification settings - Fork 357
/
Copy pathTree.cs
117 lines (95 loc) · 2.95 KB
/
Tree.cs
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
using System.Collections.Generic;
namespace TreeTraversal
{
public class Tree
{
public int Id { get; private set; }
private List<Tree> _children = new List<Tree>();
public Tree(int depthCount, int childrenCount)
{
Id = 1;
if (depthCount > 0)
{
for (int i = 0; i < childrenCount; i++)
_children.Add(new Tree(Id * 10 + i + 1, depthCount - 1, childrenCount));
}
}
private Tree(int id, int depthCount, int childrenCount)
{
Id = id;
if (!(depthCount <= 1))
{
for (int i = 0; i < childrenCount; i++)
_children.Add(new Tree(Id * 10 + i + 1, depthCount - 1, childrenCount));
}
}
private void DFSRecursive(Tree tree) {
Console.Write(tree.Id + " ");
foreach (var c in tree._children)
DFSRecursive(c);
}
public void DFSRecursive()
{
DFSRecursive(this);
}
private void DFSRecursivePostorder(Tree tree)
{
foreach (var c in tree._children)
DFSRecursivePostorder(c);
Console.Write(tree.Id + " ");
}
public void DFSRecursivePostorder()
{
DFSRecursivePostorder(this);
}
private void DFSRecursiveInorderBinary(Tree tree)
{
switch (tree._children.Count)
{
case 2:
DFSRecursiveInorderBinary(tree._children[0]);
Console.Write(tree.Id + " ");
DFSRecursiveInorderBinary(tree._children[1]);
break;
case 1:
DFSRecursiveInorderBinary(tree._children[0]);
Console.Write(tree.Id + " ");
break;
case 0:
Console.Write(tree.Id + " ");
break;
default:
throw new Exception("Not binary tree!");
}
}
public void DFSRecursiveInorderBinary()
{
DFSRecursiveInorderBinary(this);
}
public void DFSStack()
{
var stack = new Stack<Tree>();
stack.Push(this);
while (stack.Count != 0)
{
Console.Write(stack.Peek().Id + " ");
var temp = stack.Pop();
foreach (var c in temp._children)
stack.Push(c);
}
}
public void BFSQueue()
{
var queue = new Queue<Tree>();
queue.Enqueue(this);
while (queue.Count != 0)
{
Console.Write(queue.Peek().Id + " ");
var temp = queue.Dequeue();
foreach (var c in temp._children)
queue.Enqueue(c);
}
}
}
}