给定一个二叉搜索树,任务是按以下顺序打印 BST 的节点:
- 如果 BST 包含编号为1到N 的级别,则打印顺序为级别1 、级别N 、级别2 、级别N – 1 ,依此类推。
- 顶层顺序 ( 1, 2 , …) 节点从左到右打印,而底层顺序 ( N , N-1 , …) 节点从右到左打印。
例子:
Input:
Output: 27 42 31 19 10 14 35
Explanation:
Level 1 from left to right: 27
Level 3 from right to left: 42 31 19 10
Level 2 from left to right: 14 35
Input:
Output: 25 48 38 28 12 5 20 36 40 30 22 10
方法:解决问题的思路是将BST的节点按照级别和节点值的升序和降序存储,并在升序和降序之间交替打印同一级别的所有节点。请按照以下步骤解决问题:
- 初始化一个Min Heap和一个Max Heap,分别按照级别和节点值的升序和降序存储节点。
- 对给定的 BST执行层序遍历,将节点存储在各自的优先级队列中。
- 从最小堆和最大堆交替打印每一层的所有节点。
- 如果发现 Min Heap或Max Heap中的任何级别已被打印,则跳到下一个级别。
下面是上述方法的实现:
C++
输出:
时间复杂度: O(V log(V)),其中 V 表示给定二叉树中的顶点数
辅助空间: O(V)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live