如约定一样,今天放出分词程序的 数据插入代码
首先,我们需要有一个方法查询当前字符在这棵树的地方,如果不存在返回-1,存在返回该记录的索引。
每个字符只到每一层上存在一次
/**/
/// <summary>
/// 得到关键词ID号
/// </summary>
/// <param name="tmpRoot">支点</param>
/// <param name="NoteValue">结点值</param>
/// <returns>ID号</returns>
private int FindIndex(List < KeyWordTreeNode > tmpRoot, char NoteValue)
... {
if (tmpRoot.Count == 0) return -1;
KeyWordTreeNode TmpNode = tmpRoot[0];
for (int iCount = 0; iCount < tmpRoot.Count; iCount++)
...{
if (NoteValue ==tmpRoot [iCount ].TreeNode ) return iCount;
}
return -1;
}
/// 得到关键词ID号
/// </summary>
/// <param name="tmpRoot">支点</param>
/// <param name="NoteValue">结点值</param>
/// <returns>ID号</returns>
private int FindIndex(List < KeyWordTreeNode > tmpRoot, char NoteValue)
... {
if (tmpRoot.Count == 0) return -1;
KeyWordTreeNode TmpNode = tmpRoot[0];
for (int iCount = 0; iCount < tmpRoot.Count; iCount++)
...{
if (NoteValue ==tmpRoot [iCount ].TreeNode ) return iCount;
}
return -1;
}
下面是插入数据的源代码
/**/
/// <summary>
/// 添加如关键词
/// </summary>
/// <param name="keyWord">关键词</param>
public void AddKeyWord( string keyWord)
... {
List<KeyWordTreeNode> tmpRoot = Root.ChildList;
for (int iCount = 0; iCount < keyWord.Length; iCount++)
...{
int tmpIndex = FindIndex(tmpRoot, keyWord[iCount]);
if (tmpIndex == -1)
...{
KeyWordTreeNode tmpTreeNode = new KeyWordTreeNode(keyWord[iCount]);
tmpRoot.Add (tmpTreeNode);
tmpRoot = tmpTreeNode.ChildList;
}
else
...{
tmpRoot = tmpRoot[tmpIndex].ChildList;
}
}
}
/// 添加如关键词
/// </summary>
/// <param name="keyWord">关键词</param>
public void AddKeyWord( string keyWord)
... {
List<KeyWordTreeNode> tmpRoot = Root.ChildList;
for (int iCount = 0; iCount < keyWord.Length; iCount++)
...{
int tmpIndex = FindIndex(tmpRoot, keyWord[iCount]);
if (tmpIndex == -1)
...{
KeyWordTreeNode tmpTreeNode = new KeyWordTreeNode(keyWord[iCount]);
tmpRoot.Add (tmpTreeNode);
tmpRoot = tmpTreeNode.ChildList;
}
else
...{
tmpRoot = tmpRoot[tmpIndex].ChildList;
}
}
}
插入的基本思路是:
1、查找当前层是否存在首字符。
2、如果不存在,添加。
3、如果存在,得到索引,并把对象指向该索引的子树,继续查找下一个字符。
4、如果字符串还没结束,跳到第一步继续查询。
以上代码都放在昨天的KeyWordTree类里。明天再放出查找的代码。大家也可以先尝试着做一下。