Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //1
- public static void Across(Node node, ref string s, bool detailed)
- {
- /*
- Аргументы метода:
- 1. TreeNode node - текущий "элемент дерева" (ref передача по ссылке)
- 2. ref string s - строка, в которой накапливается результат (ref - передача по ссылке)
- */
- var queue = new Queue<Node>(); // создать новую очередь
- if (detailed) s += " заносим в очередь значение " + node.inf.ToString() + Environment.NewLine; queue.Enqueue(node); // поместить в очередь первый уровень
- while (queue.Count != 0) // пока очередь не пуста
- {
- //если у текущей ветви есть листья, их тоже добавить в очередь
- if (queue.Peek().left != null)
- {
- if (detailed) s += " заносим в очередь значение " + queue.Peek().left.inf.ToString() + " из левого поддерева" + Environment.NewLine;
- queue.Enqueue(queue.Peek().left);
- }
- if (queue.Peek().right != null)
- {
- if (detailed) s += " заносим в очередь значение " + queue.Peek().right.inf.ToString() + " из правого поддерева" + Environment.NewLine;
- queue.Enqueue(queue.Peek().right);
- }
- //извлечь из очереди информационное поле последнего элемента
- if (detailed) s += " извлекаем значение из очереди: " + queue.Peek().inf.ToString() + Environment.NewLine;
- else s += queue.Peek().inf.ToString() + " "; // убрать последний элемент очереди
- queue.Dequeue();
- }
- }
- //2
- public static void LevelPrint(Node r)
- {
- Queue<Node> queue = new Queue<Node>();
- Console.WriteLine("{0} ", r.inf);
- int temp = (int)r.inf; ;
- queue.Enqueue(r);
- while (queue.Count != 0)
- {
- if(temp > (int)queue.Peek().inf)
- Console.WriteLine();
- temp = (int)queue.Peek().inf;
- if (queue.Peek().left != null)
- {
- Console.Write("{0} ", queue.Peek().left.inf);
- queue.Enqueue(queue.Peek().left);
- }
- if (queue.Peek().right != null)
- {
- Console.Write("{0} ", queue.Peek().right.inf);
- queue.Enqueue(queue.Peek().right);
- }
- queue.Dequeue();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement