使用堆栈来获取BST的高度
using a stack to get the height of a BST
我试图使用堆栈获得BST的高度。有人告诉我,我应该使用预购和测量找到最大的堆栈大小。然而,这似乎不起作用。你知道我做错了什么吗?
int PBT::maxDepth() {
if (!root) {
return -1;
}
int depth=0;
stack<TreeNode *>s;
TreeNode * nodePtr=root;
for (; ; ) {
while (nodePtr) {
s.push(nodePtr);
if (s.size() > depth)
depth = s.size();
nodePtr=nodePtr->left;
}if (s.empty()) {
break;
}
nodePtr=s.top();
s.pop();
nodePtr=nodePtr->right;
}
return depth;
}
部分节点的堆栈大小深度值不正确。如。如果当前节点是其他节点的右子节点,则堆栈不包含该其他节点(父节点)。对于树中最右边的节点,堆栈将不包含任何项。
你必须正确地计算深度。在你的例子中,你可能会在一次弹出中上升更多的级别,所以减去一个将不起作用,但如果你将当前深度保存到堆栈中(并在弹出时恢复它),它将起作用。
要做到这一点,您应该将堆栈定义更改为eg.stack<pair<TreeNode*, unsigned> > stack;
并添加变量current_depth
。
对于每一个"nodePtr=nodeptr->left/right
",增加current_depth
。推动与
s.push(make_pair(nodeptr, current_depth));
和弹出之前,用
恢复current_depth
current_depth = s.top().second;
(节点指针明显在.first
)
相关文章:
- 如何在BST的这个简单递归实现中消除警告
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- C++:如何根据地形高度更新玩家身高?
- 如何提高BST的搜索操作效率?
- 如何更改QComboBox项目的高度大小?
- 如何在BST树中对数字的乘积收费?
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- 如何使用 C++ gdal 库将栅格地理从 EGM96 转换为 WGS84 椭球体高度基准面
- 比较C++中两个BST的节点
- 从具有父指针和左子树和右子树高度的树中删除
- 实现 BST 时出现分段错误
- C++BST课程的五条规则
- 程序输入名称和高度并显示它。我不知道如何显示列表中最高人的姓名和身高
- 计算BST返回-1的高度混淆
- 找到任何节点的BST高度
- BST设置每个指向节点的高度
- 使用堆栈来获取BST的高度