c_cpp 排序数组到平衡BST

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 排序数组到平衡BST相关的知识,希望对你有一定的参考价值。

// https://www.geeksforgeeks.org/sorted-array-to-balanced-bst/
#include <iostream>
using namespace std;

struct node {
    int data;
    struct node* left;
    struct node* right;
};

node* bst (int a[], int l, int r) {
    if (l>r)
        return NULL;

    int m= (l+r)/2;
    node *head= (node*)malloc(sizeof(node));
    head->data= a[m];
    head->left = bst(a, l, m-1);
    head->right = bst(a, m+1, r);

    return head;
}

void preOrder(node *head) {
    if (head==NULL)
        return;
    cout<< head->data << " ";
    preOrder(head->left);
    preOrder(head->right);
}

int main() {
    int t;
    cin>>t;
    while (t-->0) {
        int n;
        cin>>n;
        int a[n];
        for (int i=0;i<n;i++)
            cin>>a[i];

        node* head= bst(a,0, n-1);
        preOrder(head);
    }
}

以上是关于c_cpp 排序数组到平衡BST的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 检查给定数组是否可以表示BST的Preorder Traversal

[数据结构]二叉搜索树(BST) VS 平衡二叉排序树(AVL) VS B树(平衡多路搜索树) VS B+树 VS 红黑树(平衡二叉B树)

BST性能分析&改进思路——平衡与等价

什么是树(平衡树,排序树,B树,B+树,R树,红黑树)

BST(二叉搜索树),AVL(平衡二叉树)RBT(红黑树)的区别

细说二叉树