C#如何使用队列实现最多到第n层的二叉树层次遍历
改造思路与实现
我们只需要在原有层次遍历逻辑的基础上增加层数计数即可,每次处理完一整层节点后更新当前层数,到达指定的最大层数后直接终止遍历就行。
改造后代码
// 新增入参maxLevel指定要打印的最大层数 void printLevelOrderUpToN(int maxLevel) { // 边界校验:层数不合法或者树为空直接返回 if (maxLevel < 1 || root == null) return; Queue<Node> queue = new Queue<Node>(); queue.Enqueue(root); int currentLevel = 1; // 从第一层开始计数 while (queue.Count != 0 && currentLevel <= maxLevel) { // 先拿到当前层的总节点数,确保只处理当前层的节点 int currentLevelSize = queue.Count; for (int i = 0; i < currentLevelSize; i++) { Node tempNode = queue.Dequeue(); Console.Write(tempNode.data + " "); // 子节点入队,留给下一层处理 if (tempNode.left != null) { queue.Enqueue(tempNode.left); } if (tempNode.right != null) { queue.Enqueue(tempNode.right); } } // 处理完一层,层数计数+1 currentLevel++; } }
效果验证
你给出的示例中,传入maxLevel=3调用该方法,输出结果为1 2 3 5 6 7 8,正好是到第三层的所有节点,不会输出第四层的4和11,符合需求。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

