62,072
社区成员
发帖
与我相关
我的任务
分享
public class BinaryTree
{
private Node _head;
private string cStr;
public Node Head
{
get { return _head; }
}
public BinaryTree(string constructStr)
{
cStr = constructStr;
_head = new Node(cStr[0]);
Add(_head, 0);
}
private void Add(Node parent, int index)
{
int leftIndex = 2 * index + 1;
if (leftIndex < cStr.Length)
{
if (cStr[leftIndex] != '#')
{
parent.Left = new Node(cStr[leftIndex]);
Add(parent.Left, leftIndex);
}
else
{
parent.Left = new Node("");
Add(parent.Left, leftIndex);
}
}
int rightIndex = 2 * index + 2;
if (rightIndex < cStr.Length)
{
if (cStr[rightIndex] != '#')
{
parent.Right = new Node(cStr[rightIndex]);
Add(parent.Right, rightIndex);
}
else
{
parent.Right = new Node("");
Add(parent.Right, rightIndex);
}
}
}
}
public class Node
{
private readonly object _data;
public object Data
{
get { return _data; }
}
public Node Left { get; set; }
public Node Right { get; set; }
public Node(object data)
{
_data = data;
}
public override string ToString()
{
return _data == null ? null : _data.ToString();
}
}
public void PreOrder(Node node, ref StringBuilder PreStr)
{
if (node != null)
{
PreStr.Append(node.ToString());
PreOrder(node.Left, ref PreStr);
PreOrder(node.Right, ref PreStr);
}
}
public void MidOrder(Node node, ref StringBuilder MidStr)
{
if (node != null)
{
MidOrder(node.Left, ref MidStr);
MidStr.Append(node.ToString());
MidOrder(node.Right, ref MidStr);
}
}
public void AfterOrder(Node node, ref StringBuilder AfterStr)
{
if (node != null)
{
AfterOrder(node.Left, ref AfterStr);
AfterOrder(node.Right, ref AfterStr);
AfterStr.Append(node.ToString());
}
}