c++ - 计算二叉搜索树级别中的节点数
问题描述
就像标题所说,我想计算树的任何给定级别的节点。我已经知道如何制作成员函数来计算树的所有节点,只是不确定如何接近特定级别。这是我尝试过的。任何帮助表示赞赏。
第一个参数是指向用户输入的字符数组的点。root 是代表“最旧”节点的私有变量。
int TreeType::GetNodesAtLevel(ItemType* itemArray, int level)
{
TreeNode* p = root;
if (itemArray == NULL)
return;
if (level == 0)
{
cout << p->info << " ";
return;
}
else
{
GetNodesAtLevel(itemarray->left, level); //dereference in one and not the other was just testing
GetNodesAtLevel(*itemarray->right, level); //neither seems to work
}
}
解决方案
做到这一点的方法是使用队列(使用级别顺序遍历 - BFS)。现在按照这个:
取两个变量,count_level 和 count_queue(保持队列中的节点总数)。
对于这样的树:
A
/ \
B C
/ \ \
K L D
/
E
最初count_level = 0
和count_queue = 0
. 现在:
- 向队列中添加一个节点(此时 A,增量
count_queue
为1)。 - 现在当你发现
count_level = 0
这样做 ->count_level = count_queue
。 - 在出队时添加孩子节点,直到
count_level
变为 0。因此,此时请执行第2步,这将为您提供刚刚处理过的节点以下级别的节点数。
推荐阅读
- php - 如何在 codeigniter 中为分页创建动态 url?
- f# - F# 中具有不同参数的流水线函数
- node.js - 高响应时间 Parse Server Node express
- javascript - 在范围滑块javascript中切换大小写
- excel - 在文本字符串中插入什么以使 Excel 理解必须进入下一个单元格的内容
- android - Activity.runOnUiThread(Runnable action) 只更新一次视图
- java - 如何在 Serializable Bean 中序列化接口
- winforms - 如何将 Combobox 列添加到 GridControl?
- reactjs - 用于 ReactJS 的 adal.js 或 msal.js
- python - 如何在已在 tkinter 画布中平滑绘制的线条上重绘线条?