假设我们有一棵树,每个节点都有一组预定的传出节点。是否有可能提出一个快速的方式/优化来计算给定级别值的叶节点数量?如果有人能够提出任何想法/链接/资源来做同样的事情,那将会很棒。计算树中的叶节点
计算树中的叶节点
回答
不,你仍然需要遍历整个树。没有办法只从树的每个节点的子节点数量来预测精确的结构 - 或近似它。
除此之外:只保留一个计数器并在每次插入时更新它。更简单并且不会改变任何操作的时间复杂度,除了计算树叶数量,其将减少到O(1)
。
你可以提供一个简单的伪代码来说明如何计算O(1)次叶节点的“数量”吗? –
@ N.M。正如我在答案中已经写过的那样:只用叶子的计数器。我不认为这需要任何代码来解释。代码几乎是一个树的完整实现 – Paul
这实际上可以变得非常艰难的事情。由于它改变了什么是编程语言,什么是输入数据结构,是树二进制还是一般树(任意数量的子树),树的大小。
最普遍的想法是从根开始运行DFS或BFS,以获取每个节点级别,然后创建一个集合列表,其中每个集合包含单个级别的节点。该集可以是任何结构,标准列表是好的。
假设你在C++中工作,如果你需要性能(甚至比C更好),那么这是很好的,如果不是最好的实际选择的话。
比方说,我们有一个通用树,输入结构就像您提到的那样是邻接表。
//nodes are numbered from zero to N-1
vector<vector<int>> adjList;
然后,您运行BFS或DFS,要么为树,要为每个节点保留一个级别。下一个节点的级别是其父级加一级。
一旦你发现了关卡,你就把这个节点放在这里。
vector<vector<int>> nodesPartitionedByLevels(nodeCount);
//run bfs here
//inside it you call
nodesPartitionedByLevels[level].push_back(node)
就是这样。
然后,当您拥有这些关卡时,您会迭代该关卡上的所有节点,并检查邻接关系列表是否包含任何节点。您可以拨打adjList[node].empty()
。如果真的比那是叶节点。
- 1. 计算二叉树中的节点数和叶节点数
- 2. 在没有叶子/节点的二叉树中计算节点?在计划中?
- 3. 计算树中的节点
- 4. 如何计算二叉搜索树中的非叶节点?
- 5. 如何计算extjs树中节点的叶数?
- 6. 计算B +树叶节点的阻塞因子
- 7. 计算ocaml中树中的节点数
- 8. GWT细胞树 - 叶节点
- 9. 计算树状图树叶的排序
- 10. T-SQL CTE计算所有叶节点
- 11. 计算树中的左子节点
- 12. 计算二叉树中的节点
- 13. PHP计算树中的所有节点
- 14. B +树中的非叶节点
- 15. 访问树中的节点/叶子
- 16. 计数高度平衡树的叶节点的计数函数
- 17. 在二叉树中计算节点
- 18. 如何统计树中给定节点之前的叶子?
- 19. 茎和叶节点算法
- 20. 在二叉树的叶节点的
- 21. 二叉树中距给定节点最近的叶节点
- 22. 树类的实现与节点和叶
- 23. L叶节点的二叉树高度
- 24. B +树的叶节点大小
- 25. 计数JSON叶节点
- 26. 在树结构中,如何命名树,节点,树叶?
- 27. 保存AVL树中节点下的树叶数量
- 28. 计算二叉树节点数
- 29. 计算二叉树内部节点
- 30. 有效计算树中存储的树叶
你的意思是说,每个节点都有“d”个孩子? –
@SalvadorDali不一定 –
然后有没有简单的方法来计算它(通过容易我的意思是没有看整个树),因为代码实际上很容易。 –