📄 treelinkedlist.cs
字号:
using System;
using System.Collections;
using HRD.Core;
namespace HRD.TreeList
{
public class TreeLinkedList : ITreeList
{
protected class TreeNode
{
public ChessStep chessStep;
public TreeNode parentNode;
public TreeNode link;
}
protected TreeNode root = null;
protected TreeNode current = null;
protected TreeNode end = null;
protected int count;
//======================================================
// 清空节点
//======================================================
public void ClearAll()
{
root = null;
current = null;
end = null;
count = 0;
}
//======================================================
// 插入节点
//======================================================
public void insertNode(ChessStep newitem)
{
TreeNode newNode;
newNode = new TreeNode();
newNode.chessStep = newitem;
newNode.link = null;
newNode.parentNode = null;
if(root == null)
{
root = newNode;
current = newNode;
end = current;
}
else
{
newNode.parentNode = current;
end.link = newNode;
end = newNode;
end.link = newNode;
end = newNode;
}
count++;
}
//======================================================
// 移动当前指针到下一个节点
//======================================================
public void MoveCurrentToNext()
{
if(current != null && current.link != null)
current = current.link;
}
//======================================================
// 获取步法列表
//======================================================
public ChessStep[] TraceResult(ChessStep chessStep)
{
Stack stack = new Stack();
TreeNode nodeTracer = current;
MoveMethod m1,m2;
short n1,n2;
m1 = chessStep.moveMethod;
n1 = chessStep.chessmanNum;
chessStep.moveMethod = MoveMethod.Nothingness;
chessStep.chessmanNum = -1;
stack.Push(chessStep);
while(nodeTracer != root)
{
m2 = nodeTracer.chessStep.moveMethod;
n2 = nodeTracer.chessStep.chessmanNum;
nodeTracer.chessStep.moveMethod = m1;
nodeTracer.chessStep.chessmanNum = n1;
stack.Push(nodeTracer.chessStep);
m1=m2;
n1=n2;
nodeTracer = nodeTracer.parentNode;
}
root.chessStep.moveMethod = m1;
root.chessStep.chessmanNum = n1;
stack.Push(root.chessStep);
int n = stack.Count;
ChessStep[] chessSteps = new ChessStep[n];
for(int i=0; i<n; i++)
chessSteps[i] = (ChessStep)(stack.Pop());
return chessSteps;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -