using System;
using System.Collections.Generic;
namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
var a = new BinaryTree("ABCDEF");
a.First(a.Head);
Console.WriteLine();
a.Level();
Console.ReadLine();
}
}
public class Node
{
private object _data;
public Node(object data)
{
_data = data;
}
public Node Left { get; set; }//左子结点
public Node Right { get; set; }//右子结点
public override string ToString()
{
return _data.ToString();
}
}
public class BinaryTree
{
private Node _head;
private string _cStor;
public Node Head
{
get { return _head; }
}
public BinaryTree(string str)
{
_cStor = str;
_head = new Node(_cStor[0]);
Add(_head,0);
}
public void Add(Node parent,int index)
{
int left = index*2 + 1;
if(left < _cStor.Length)
{
if(_cStor[left] != '#')
{
parent.Left = new Node(_cStor[left]);
Add(parent.Left,left);
}
}
int right = index*2 + 2;
if(right < _cStor.Length)
{
if(_cStor[right] != '#')//#为空结点
{
parent.Right = new Node(_cStor[right]);
Add(parent.Right,right);
}
}
}
public void First(Node parent)//深度优先遍历
{
if (parent != null)
{
Console.Write(parent);
First(parent.Left);
First(parent.Right);
}
}
public void Level()//广度优先遍历
{
var queue = new Queue<Node>();
queue.Enqueue(_head);
while (queue.Count > 0)
{
var node = queue.Dequeue();
Console.Write(node);
if(node.Left != null)
queue.Enqueue(node.Left);
if(node.Right != null)
queue.Enqueue(node.Right);
}
}
}
}