如何找到一个树形结构的匹配子节点后返回全路径?

lianying168000 2020-05-19 03:49:26
项目中有一个List<DataModel>的数据集合,DataModel类定义中包含了一个List<DataModel>属性,这样就组成了一个树形的结构。
想实现一个算法,一直遍历直到找到匹配的子节点,然后直接返回该子节点和路径上的祖先节点?用回溯法能实现么?

能实现找到匹配叶子节点直接返回,不继续搜索么?
...全文
584 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lianying168000 2020-05-19
  • 打赏
  • 举报
回复
写出来了,用递归加一个全局变量标记是否已经找到,代码如下:
private static bool found = false;

        private static List<DataModel> Find(string id, List<DataModel> list)
        {
            List<DataModel> resultList = new List<DataModel>();
            Backtrack(resultList, list, id);
            return resultList;
        }

        private static void Backtrack(List<DataModel> resultList, List<DataModel> list, string id)
        {
            if (list == null) return;

            if (found) return;

            for (int i = 0; i < list.Count; i++)
            {
                resultList.Add(list[i]);
                Backtrack(resultList, list[i].Childs, id);
                if (list[i].ID.Equals(id) || found)
                {
                    found = true;
                    return;
                }

                resultList.Remove(resultList[resultList.Count - 1]);
            }
        }

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧