给定一棵二叉树,请把它转化成 Binary Search Tree(BST),且不能改变原二叉树的形状。如下是两个转化示例
解:我们可以通过三大步骤完成转化
(1)创建一个辅助数组 arr[],然后中序遍历原二叉树,把各节点存放到 arr[] 中,这一步时间复杂度为 O(n);
(2)对 arr[] 进行升序排序,这一步的时间复杂度和具体的排序算法有关,快速排序是 O(n^2),堆排序或归并排序是 O(nLogn);
(3)再次中序遍历原二叉树,在遍历的过程中,把数组 arr[] 中的元素依次复制到二叉树的每个节点上,这一步时间复杂度为 O(n)。
C 实现
#include<stdio.h>
#include<stdlib.h>
/* A binary tree node structure */
struct node
{
int data;
struct