微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# 通过遍历树递归打印

如何解决c# 通过遍历树递归打印

我正在尝试遍历并打印以下树:

enter image description here

我的预期结果是:

State2
State2/State3
State2/State3/State4

以下是我正在尝试的代码

    public void EA_MenuClick(EA.Repository rep,string location,string menuName,string itemName)
        {
EA.Diagram diag;
                DiagramElement diagramElementsObj = new DiagramElement();
            char[] charsToReplaceFromDiagramId = new char[] { '{','}' };
                            diag = rep.GetContextObject();

                            diagramElementsObj.refDiagramName = diag.Name;
                            diagramElementsObj.refDiagramId = diag.DiagramGUID.Trim(charsToReplaceFromDiagramId);

                            diagramElementsObj.states = new List<State>();
                            diagramElementsObj.transitions = new HashSet<Transition>();

                            foreach (EA.DiagramObject diagramObj in diag.DiagramObjects)
                            {
                                int elementId = diagramObj.ElementID;
                                EA.Element element = rep.GetElementByID(elementId);

                                State stateObj = new State();

                              
                                    if (element.MetaType == "State")
                                    {
                                        //stateObj.name = Utilities.FormatElementName(element.Name,rep,element);
                                        FormatElementName(element.Name,element);
                                        stateObj.name = stateName;
                                        diagramElementsObj.states.Add(stateObj);
                                    }
                                

                                if (element.Methods.Count > 0)
                                {
                                    GetActionsByState(element,stateObj);
                                }
                                GetAllTransitions(rep,diagramElementsObj,element);
                            }
        }

这里的DiagramElement父类,它有一个名为State 的子类列表。 State一个名为 Name属性。我正在准备上述课程中的对象。我不知道我是否可以用下面的递归方法来做。

下面是格式化的方法

public void FormatElementName(string result,EA.Repository rep,EA.Element element)
    {
        if (element.Elements.Count == 0)
        {
            stateName = result;
            return;
        }
        foreach (EA.Element child in element.Elements)
        {
            FormatElementName(result + "/" + child.Name,child);
        }
    }

并以相反的顺序获得以下输出

State2/State3/State4
State3/State4
State4

我怎样才能颠倒顺序?我正在使用 c#。

解决方法

我想你想要这样的东西。

FormatElementName("",rep,element);

public void FormatElementName(string prefix,EA.Repository rep,EA.Element element)
{
   string result = prefix + element.Name;
   prefix = result + "/";

   State stateObj = new State();                                   
   stateObj.name = stateName;
   diagramElementsObj.states.Add(stateObj);    

   if (element.Elements.Count == 0)
   {    
       return;
   } 
   foreach (EA.Element child in element.Elements)
   {
       FormatElementName(prefix,child);
   }
 }
,

以下是解决方案的代码:

public void GetStateName(string result,EA.Element element)
        {
            if (element.ParentID == 0)
            {
                stateName = result;
                return;
            }
            else
            {
                EA.Element parent = rep.GetElementByID(element.ParentID);
                GetStateName(parent.Name + "/" + result,parent);
            }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。