public class Node<T>
{
private T _data;
private Node<T> _lNode;
private Node<T> _rNode;
private Node<T> _pNode;
protected Node()
{
}
public Node(T Data)
{
_data = Data;
}
protected T Data
{
get { return _data; }
set { _data = value; }
}
protected Node<T> LNode
{
get { return _lNode; }
set { _lNode = value; }
}
protected Node<T> RNode
{
get { return _rNode; }
set { _rNode = value; }
}
protected Node<T> PNode
{
get { return _pNode; }
set { _pNode = value; }
}
private static void SetNodeInfo(ref Node<T> node, Node<T> LNode, Node<T> RNode, Node<T> PNode)
{
node.LNode = LNode;
node.RNode = RNode;
node.PNode = PNode;
}
public void SetNodeLRP(Node<T> LNode, Node<T> RNode, Node<T> PNode)
{
this.LNode = LNode;
this.RNode = RNode;
this.PNode = PNode;
}
//先序遍历
public static void FirstTravel(Node<T> node)
{
Node<T> root = FindRoot(node);
RootFirst(root);
}
public static void RootFirst(Node<T> root)
{
if (root != null)
{
Debug.Write(root.Data+" ");
RootFirst(root.LNode);
RootFirst(root.RNode);
}
}
private static Node<T> FindRoot(Node<T> node)
{
while (node.PNode!=null)
{
node = node.PNode;
}
return node;
}
}
调用的程序是
static void Main(string[] args)
{
Node<object> A=new Node<object>(1); //int
Node<object> B = new Node<object>('2'); //char
Node<object> C = new Node<object>("3"); //string
Node<object> D = new Node<object>(4); //int
Node<object> E = new Node<object>('5'); //char
Node<object> F = new Node<object>("6"); //string
Node<object> G = new Node<object>(7); //int
Node<object> H = new Node<object>('8'); //char
C.SetNodeLRP(null,null,B);
D.SetNodeLRP(null,null,B);
B.SetNodeLRP(C,D,A);
F.SetNodeLRP(null,null,E);
H.SetNodeLRP(null,null,G);
G.SetNodeLRP(null,H,E);
E.SetNodeLRP(F,G,A);
A.SetNodeLRP(B,E,null);
Node<object>.FirstTravel(B);
}