C#中的级别顺序二进制树遍历(upton n级别)



我正在尝试使用队列来理解树的级别顺序遍历。这是我的代码(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#中生成代码。

最新更新