如約定一樣,今天放出分詞程序的 數據插入代碼
首先,我們需要有一個方法查詢當前字符在這棵樹的地方,如果不存在返回-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;
}
下面是插入數據的源代碼
/**//// <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;
}
}
}
插入的基本思路是:
1、查找當前層是否存在首字符。
2、如果不存在,添加。
3、如果存在,得到索引,並把對象指向該索引的子樹,繼續查找下一個字符。
4、如果字符串還沒結束,跳到第一步繼續查詢。
以上代碼都放在昨天的KeyWordTree類裡。明天再放出查找的代碼。大家也可以先嘗試著做一下。