我正在尝试使用队列来理解树的级别顺序遍历。这是我的代码(https://www.geeksforgeeks.org/level-order-tree-traversal/):
void printLevelOrder()
{
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(root);
while (queue.Count != 0) {
Node tempNode = queue.Dequeue();
Console.Write(tempNode.data + " ");
if (tempNode.left != null) {
queue.Enqueue(tempNode.left);
}
if (tempNode.right != null) {
queue.Enqueue(tempNode.right);
}
}
}
如何使用队列将树中的节点打印到n级?
例如:
1 ------------------- Level 1
2 3 ------------------- Level 2
5 6 7 8 ----------------- Level 3
4 11 ------------------ Level 4
print nodes upto level 3?
将每个节点与其级别关联:
void printLevelOrder(int maxLevel)
{
var queue = new Queue<(Node node, int Level)>();
queue.Enqueue(root);
while (queue.Count != 0) {
var (tempNode, level) = queue.Dequeue();
if(level > maxLevel) return;
Console.Write(tempNode.data + " ");
if (tempNode.left != null) {
queue.Enqueue((tempNode.left, level+1));
}
if (tempNode.right != null) {
queue.Enqueue((tempNode.right, level+1));
}
}
}
如果要逐层打印元素,则必须在将每个元素放入队列之前再添加一个额外的约束;您需要检查队列的大小,以便在i
是队列大小的时候只能将i-th
元素出队,并且只能将每个子树的i-th
元素入队。
void printLevelOrder(){
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(root);
while (queue.Count != 0) {
int size = queue.getSize();
list Array/LinkedList;
while(size-- > 0){
Node tempNode = queue.Dequeue();
list.add(tempNode.data);
if (tempNode.left != null) {
queue.Enqueue(tempNode.left);
}
if (tempNode.right != null) {
queue.Enqueue(tempNode.right);
}
}
print: list;
}
}
注意:请忽略语法错误,并尝试在C#
中生成代码。