vc6 树形控件读取并绘制的问题

我有一些无序带节点名的数据
比如
1,22,3,=a
1,22,4,=b
1,33,5,=c
1,22,6,=d
要写成这样的
图片说明
该怎么写算法啊,主要是判断父节点有无和指针的问题

 CString * CTreeappDlg::SplitString(CString str, char split, int& iSubStrs)
{
    int iPos = 0; //分割符位置
    int iNums = 0; //分割符的总数
    CString strTemp = str;
    CString strRight;
    //先计算子字符串的数量
    while (iPos != -1)
    {
        iPos = strTemp.Find(split);
        if (iPos == -1)
        {
            break;
        }
        strRight = strTemp.Mid(iPos + 1, str.GetLength());
        strTemp = strRight;
        iNums++;
    }
    if (iNums == 0) //没有找到分割符
    {
        //子字符串数就是字符串本身
        iSubStrs = 1; 
        return NULL;
    }
    //子字符串数组
    iSubStrs = iNums + 1; //子串的数量 = 分割符数量 + 1
    CString* pStrSplit;
    pStrSplit = new CString[iSubStrs];
    strTemp = str;
    CString strLeft;
    for (int i = 0; i < iNums; i++)
    {
        iPos = strTemp.Find(split);
        //左子串
        strLeft = strTemp.Left(iPos);
        //右子串
        strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());
        strTemp = strRight;
        pStrSplit[i] = strLeft;
    }
    pStrSplit[iNums] = strTemp;
    return pStrSplit;
}


void CTreeappDlg::Append(CString str)
{
    int n = 0;
    CString * data = SplitString(str, ',', n);

    HTREEITEM hRootItem;
    hRootItem = m_tree.GetRootItem();
    bool b = false;
    while (hRootItem != NULL)
    {
        if (m_tree.GetItemText(hRootItem) == data[0])
        {
            b = true;
            break;
        }
        hRootItem = m_tree.GetNextItem(hRootItem, TVGN_NEXT);
    }
    if (!b)
    {
        hRootItem = m_tree.InsertItem((LPCTSTR)data[0]);
    }

    for (int i = 1; i < 3; i++)
    {
        HTREEITEM pre = hRootItem;
        hRootItem = m_tree.GetChildItem(hRootItem);
        b = false;
        while (hRootItem != NULL)
        {
            if (m_tree.GetItemText(hRootItem) == data[i])
            {
                b = true;
                break;
            }
            hRootItem = m_tree.GetNextItem(hRootItem, TVGN_NEXT);
        }
        if (!b)
        {
            hRootItem = m_tree.InsertItem((LPCTSTR)data[i], pre);
            m_tree.Expand(pre,TVE_EXPAND);
        }
    }
}

void CTreeappDlg::OnButton1() 
{
    Append("1,22,3,=a");
    Append("1,22,4,=b");
    Append("1,33,5,=c");
    Append("1,22,6,=d");
}

循环就行了,先查找有没有这个目录,有就打开,没有就创建之后再打开,然后循环操作下一个目录。

先把你的矩阵转成树形结构,根节点,子节点等,全部串联起来,然后再插入树形结构

创建子节点需要父节点的指针,都是未知的啊

利用矩阵构造树形结构