`
yanwt
  • 浏览: 98831 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

知道叶子节点集合怎么生成树

阅读更多
先说一下问题吧
有一颗任意节点的树型结构,级数和节点数不确定,给定叶子节点集合怎么按照原树生成一颗树。要求父节点的子节点如果都不在集合中,则该节点不显示。

我目前想到的算法这样
定义树形结构:
treeNode{
id
name
parentid
set<treeNode>
}

定义一Map<id,treeNode>存放父节点对象。

利用递归遍历叶子节点集合,取父节点id,检查Map中是否存在该节点。
如果存在则取出该父节点,在该节点的叶子节点中添加当前叶子节点,保存在Map中,递归该父节点直至到根节点。
如果不存在,则新建个treeNode,在该节点的叶子节点中添加当前叶子节点,保存在Map中,递归该父节点直至到根节点。
最终取出根节点对象就是最终的树。

不知道大家是否有更优的算法。
分享到:
评论

相关推荐

    图的操作(遍历,最小生成树等操作)

    DFS 是一种递归的遍历方法,它首先访问一个顶点,然后尽可能深地沿着某一条路径探索,直到达到叶子节点(没有未访问过的邻接点的节点),再回溯到上一个节点,继续探索其他分支。DFS 可以通过栈来实现,也可以用递归...

    数据结构课程设计 最小生成树 迷宫

    最小生成树(Minimum Spanning Tree, MST)是连接图中所有顶点的无环加权边集合,其总权重尽可能小。在实际应用中,如城市交通网络规划、计算机网络连接等问题中,寻找最小生成树具有重要意义。 在解决最小生成树...

    基于最小生成树的连通支配集求解算法.pdf

    本文介绍的算法主要基于以下一个重要性质:简单连通无向图的最小CDS是该图的一棵包含最多叶子节点的生成树中的非叶子节点的集合。这一发现使得可以通过构造特定的MST来解决CDS问题。 #### 四、算法设计 该算法首先...

    数据结构 广度 深度 拓扑 最短路径 最小生成树

    最小生成树是图论中的一个重要概念,它是指一个连通图的边的集合,这些边构成一棵树,且树上的所有边的权重之和最小。Prim算法和Kruskal算法是两种常用的最小生成树算法,Prim算法从一个节点开始逐步添加边,而...

    图的遍历、最短路径、最小生成树

    1. **深度优先遍历** 是一种递归策略,它从一个顶点出发,尽可能深地探索图的分支,直到到达叶子节点(没有未访问过的邻居的节点),然后回溯到上一个节点并继续探索其他分支。在邻接表存储的图中,通常使用栈来实现...

    图的常用程序 (构造,DFS,BFS,及其生成树)

    `Forest.h` 文件可能定义了森林类,森林是多个无环图(即树)的集合,这在处理生成树算法时非常有用。在C++中,森林可能由节点类和边类组成,节点类包含指向其子节点的指针,边类则记录连接两个节点的信息。 总的来...

    图的遍历和生成树的求解实现报告设计

    深度优先搜索是一种递归策略,从一个顶点出发,沿着某一条边尽可能深地探索图的分支,直到到达叶子节点或回溯到一个未被访问的邻接节点。非递归实现通常使用栈来保存待访问的节点。广度优先搜索则使用队列,从起始...

    用C++语言解决图的遍历和生成树求解问题(课程设计)

    5. **最小生成树**:最小生成树算法用于找到连接所有顶点的边的集合,使得这些边的总权重最小。Kruskal's Algorithm 是基于贪心策略,按边的权重从小到大依次考虑,而Prim's Algorithm 则是从一个顶点开始,逐步扩展...

    课程设计 图的遍历及生成树求解实现(说明书、程序 、任务书)

    深度优先搜索(DFS)从一个顶点开始,沿着边尽可能深地探索图的分支,直到到达一个叶子节点,然后回溯到之前的一个节点,继续探索其他分支。在C语言中,可以使用递归函数或栈来实现DFS。 广度优先搜索(BFS)则从...

    图 拓扑排序 深度搜索 广度搜索 最小生成树

    DFS从起点开始,尽可能深地探索图的分支,直到达到叶子节点或回溯到未完全探索的分支。DFS可以用来检测图中是否存在环,也可以用于拓扑排序和其他问题的解决。在实际应用中,DFS通常通过栈或递归实现。 相反,**...

    将数据记录直接高速生成树实例

    树的顶部节点称为根节点,没有子节点的节点称为叶子节点。在实际应用中,树常用于表示层次关系,例如组织结构或文件系统的目录结构。 将数据库中的数据记录转化为树结构,主要是为了优化查询性能和便于处理层次关系...

    数据结构 哈夫曼树 上机实验

    2. **HuffmanCoding 函数**:该函数用于生成哈夫曼树并计算出每个叶子节点对应的哈夫曼编码。 - 参数说明: - `HuffmanTree &HT`: 哈夫曼树引用。 - `HuffmanCode &HC`: 存储哈夫曼编码的数组引用。 - `int *w`:...

    数据结构邻接矩阵DFS非递归算法以及PRIM算法最小生成树

    深度优先遍历(DFS)是一种图遍历算法,它从一个起始节点开始,尽可能深地探索图的分支,直到到达叶子节点,然后回溯到上一个节点,继续探索其他分支。非递归实现DFS通常使用栈作为辅助数据结构。以下是使用邻接矩阵...

    构造哈夫曼树,并生成编码

    2. **插入叶子节点**:将输入的权值集合中的每一个元素作为一个叶子节点插入到列表中。 3. **选择最小权重的两个节点**:从列表中选取两个具有最小权值的节点。 4. **创建新的父节点**:将这两个节点作为左右子节点...

    红黑树-动态演示生成红黑树

    树的根节点默认为黑色,叶子节点(NIL或空节点)也默认为黑色。以下是红黑树的五个性质: 1. 每个节点不是红色就是黑色。 2. 根节点是黑色。 3. 所有叶子节点(NIL节点)都是黑色。 4. 如果一个节点是红色,则它的...

    数据结构练习题(1).doc

    给定权值分别为11, 8, 6, 2, 5的叶子结点,构建的哈夫曼树的带权路径长度是所有叶子结点到根的路径长度之和,计算得到71。 7. **串的特性**:串是只包含单个字符的数据元素组成的线性表,它的特殊性在于数据元素是...

    图的深度广度遍历,关键路径和最短路径

    叶子节点是生成树中没有子节点的节点,其数量可以通过遍历生成树得到,而树的深度则为从根节点到最远叶子节点的最长路径长度。 在邻接表法中,图的邻接矩阵被转换为一系列链表,每个节点对应一个链表,链表中的元素...

    数据结构课件---树

    树的基本操作包括创建空树、销毁树、生成树、遍历树、求树的深度和度等。遍历是访问树中每个结点的过程,常见的遍历方法有前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。插入和删除结点是树...

    2008-集合论与图论-期末试题及答案1

    10. 判断对错:这部分涉及集合的并、交和笛卡尔积,以及图的性质,如圈的存在性、生成树数量、正则图的特征等。 证明部分:试题要求证明集合的运算性质,如集合的并、交的性质,以及笛卡尔积的运算规则。此外,还...

Global site tag (gtag.js) - Google Analytics