Skip to content

Commit 79cf010

Browse files
author
jianminchen
committed
Leet code tree questions
Implementation using C#
1 parent 21f61dd commit 79cf010

File tree

1 file changed

+200
-0
lines changed

1 file changed

+200
-0
lines changed

TreeDemo.cs

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
/* May 26, 2015 http://arachnode.net/blogs/programming_challenges/archive/2009/09/25/recursive-tree-traversal-orders.aspx */
9+
namespace TreeTraversal
10+
{
11+
internal class Program
12+
{
13+
private static readonly Queue<Node> Queue = new Queue<Node>();
14+
15+
private static readonly Queue<Node> Queue2 = new Queue<Node>();
16+
17+
private static void Main()
18+
{
19+
var node1 = new Node();
20+
var node2 = new Node();
21+
var node3 = new Node();
22+
var node4 = new Node();
23+
var node5 = new Node();
24+
var node6 = new Node();
25+
var node7 = new Node();
26+
27+
node1.Value = 1;
28+
node2.Value = 2;
29+
node3.Value = 3;
30+
node4.Value = 4;
31+
node5.Value = 5;
32+
node6.Value = 6;
33+
node7.Value = 7;
34+
35+
node1.Left = node2;
36+
node1.Right = node3;
37+
38+
node2.Left = node4;
39+
node2.Right = node5;
40+
41+
node3.Left = node6;
42+
node3.Right = node7;
43+
44+
Console.WriteLine("PreorderTraversal");
45+
46+
PreorderTraversal(node1);
47+
48+
Console.WriteLine("PreorderTraversalIterative");
49+
ArrayList list = preorderTraversalIterative(node1);
50+
foreach (Object s in list)
51+
{
52+
int tmp = (int)s;
53+
Console.WriteLine(tmp);
54+
}
55+
56+
Console.WriteLine("InorderTraversal");
57+
58+
InorderTraversal(node1);
59+
60+
Console.WriteLine("PostorderTraversal");
61+
62+
PostorderTraversal(node1);
63+
64+
Console.WriteLine("BreathFirstTraversal");
65+
66+
BreadthFirstTraversal(node1);
67+
68+
Console.WriteLine("BreathFirstTraversalIterative");
69+
70+
BreadthFirstTraversalIterative(node1);
71+
72+
Console.ReadLine();
73+
74+
75+
}
76+
77+
private static void PreorderTraversal(Node node)
78+
{
79+
if (node == null)
80+
{
81+
return;
82+
}
83+
84+
Console.WriteLine(node.Value.ToString());
85+
86+
PreorderTraversal(node.Left);
87+
PreorderTraversal(node.Right);
88+
}
89+
90+
private static void InorderTraversal(Node node)
91+
{
92+
if (node == null)
93+
{
94+
return;
95+
}
96+
97+
InorderTraversal(node.Left);
98+
99+
Console.WriteLine(node.Value);
100+
101+
InorderTraversal(node.Right);
102+
}
103+
104+
private static void PostorderTraversal(Node node)
105+
{
106+
if (node == null)
107+
{
108+
return;
109+
}
110+
111+
PostorderTraversal(node.Left);
112+
113+
PostorderTraversal(node.Right);
114+
115+
Console.WriteLine(node.Value);
116+
}
117+
118+
private static void BreadthFirstTraversal(Node node)
119+
{
120+
if (node == null)
121+
{
122+
return;
123+
}
124+
125+
Queue.Enqueue(node.Left);
126+
127+
Queue.Enqueue(node.Right);
128+
129+
Console.WriteLine(node.Value);
130+
131+
if (Queue.Count != 0)
132+
{
133+
BreadthFirstTraversal(Queue.Dequeue());
134+
}
135+
}
136+
137+
private static void BreadthFirstTraversalIterative(Node node)
138+
{
139+
if (node == null)
140+
{
141+
return;
142+
}
143+
144+
Queue2.Enqueue(node);
145+
146+
while (Queue2.Count != 0)
147+
{
148+
//BreadthFirstTraversal(Queue.Dequeue());
149+
Node tmpNode = Queue2.Dequeue();
150+
151+
// visit the node
152+
Console.WriteLine(tmpNode.Value);
153+
154+
Node left = tmpNode.Left;
155+
Node right = tmpNode.Right;
156+
157+
if (left != null)
158+
Queue2.Enqueue(left);
159+
160+
if (right != null)
161+
Queue2.Enqueue(right);
162+
}
163+
}
164+
165+
166+
private static ArrayList preorderTraversalIterative(Node root) {
167+
ArrayList result = new ArrayList();
168+
Node p = new Node();
169+
170+
Stack s = new Stack();
171+
172+
p = root;
173+
if (p != null) s.Push(p);
174+
175+
while (s.Count > 0) {
176+
p = (Node)s.Peek();
177+
178+
s.Pop();
179+
180+
result.Add(p.Value);
181+
182+
if (p.Right != null) s.Push(p.Right);
183+
if (p.Left != null) s.Push(p.Left);
184+
}
185+
186+
return result;
187+
}
188+
}
189+
190+
internal class Node
191+
{
192+
public int Value { get; set; }
193+
public Node Left { get; set; }
194+
public Node Right { get; set; }
195+
public override string ToString()
196+
{
197+
return Value.ToString();
198+
}
199+
}
200+
}

0 commit comments

Comments
 (0)