我已经坚持了一段时间了。这是我到目前为止所做的,但它给出了错误的结果。
int get_min_height_iter(Node* r) {
if (!r) return 0;
std::queue<Node*> queue;
queue.push(r);
int count = 1;
while (!queue.empty()) {
Node* temp = queue.front();
queue.pop();
if (!temp->left || !temp->right)
return count;
++count;
queue.push(temp->left);
queue.push(temp->right);
}
return -1;
}
请注意,我已经可以使用递归来执行此功能,我特别感兴趣的是使用队列或堆栈。我也可以获得树的最大高度;我现在需要创建一个函数来获得最小高度。
例如在这种情况下,函数应返回3,但它返回2:
int main() {
Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->right = new Node(4);
root->left->right->left = new Node(5);
root->right->right = new Node(6);
cout << get_min_height_iter(root);
cin.get();
}
我知道它为什么这样做,我使用调试器跟踪代码,但我对二叉树没有太多经验,我不知道如何解决它。非常感谢提示!
答案 0 :(得分:2)
你有三到四个问题:
std::pair<>
捆绑该信息。如果节点结构具有“深度”或“等级”成员,则只需更新该成员。