栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 非递归遍历树结构

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 非递归遍历树结构

struct ST_NODE
{
	wstring wstrParentNode;
	wstring wstrChildNode;
	wstring wstrNodeName;
};

struct ST_MENU
{
	wstring wstrNodeId;
	wstring wstrNodeName;
};

vector> vctData;
stack majorStack;	// 主栈
stack minorStack;	// 副栈
wstring wstrMajorNode = L"";
bool bIsRtn = false;
vector vctNode;

for (size_t i = 0; i < vctData.size(); ++i)

{
    ST_NODE stNode;
    stNode.wstrChildNode = vctData[i][0];
	stNode.wstrParentNode = vctData[i][1];
	stNode.wstrNodeName = vctData[i][2];
    minorStack.push(stNode);

    vctNode.clear();

    while (!minorStack.empty())
    {
		stNode = minorStack.top();
		minorStack.pop();  // 出副栈
		majorStack.push(stNode.wstrChildNode);  // 入主栈

        ST_MENU stMenu;
		stMenu.wstrNodeId = stNode.wstrChildNode;
		stMenu.wstrNodeName = stNode.wstrNodeName;
		vctNode.push_back(stMenu);

        //
        // ******
        //

        bIsRtn = false;
        do	
        {
            bool bIsFind = false;
			ST_NODE stMinorNode;

			if (majorStack.empty())
			{
				break;
			}

			wstrMajorNode = majorStack.top();
			if (!minorStack.empty())
			{
				stMinorNode = minorStack.top();
				if (wstrMajorNode == stMinorNode.wstrParentNode)
				{
					bIsFind = true;
				}
			}

            if (!bIsFind)
            {
                majorStack.pop();
				vctNode.pop_back();
            }
            else
			{
				bIsRtn = true;
			}
        } while (!bIsRtn);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784317.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号