要擴大larsmans'優秀的答案,下面是我的深度限制的廣度優先二叉樹的遍歷c++代碼。
(代碼假設節點不包括深度信息,並進行排隊之前包裹在NodeAndDepth結構的每個節點。)
struct NodeAndDepth {
NodeAndDepth(Node *n, unsigned int d) : node(n), depth(d) {}
Node *node;
unsigned int depth;
};
void traverseBreadthFirst_WithDepthLimit(Node *root, unsigned int maxDepth) {
if (maxDepth == 0 || root == NULL) { return; }
std::queue<NodeAndDepth> q;
q.push(NodeAndDepth(root, 1));
while (!q.empty()) {
NodeAndDepth n = q.front(); q.pop();
// visit(n.node);
// cout << n.depth << ": " << n.node->payload << endl;
if (n.depth >= maxDepth) { continue; }
if (n.node->left != NULL) {
q.push(NodeAndDepth(n.node->left, n.depth + 1));
}
if (n.node->right != NULL) {
q.push(NodeAndDepth(n.node->right, n.depth + 1));
}
}
}
完美救我調試的很長一段時間 –