题目:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
思路:从一个数组中找到中间的元素作为BST的根,然后坐边的作为左子树,右边的作为右子树,递归调用
#include <iostream> #include <stack> #include <vector> #include <deque> #include <stdlib.h> using namespace std; typedef struct Bin_tree BinTree; struct Bin_tree { int value; BinTree* right; BinTree* left; }; BinTree* helper(vector<int>& vec,int low,int high) { BinTree* node=NULL; if(low > high) return NULL; int mid = low+(high-low)/2; node = new BinTree; node->value = vec[mid]; node->left = NULL; node->right = NULL; node->left = helper(vec,low,mid-1); node->right = helper(vec,mid+1,high); return node; } BinTree* ConvertBST(vector<int>& vec) { BinTree* root=NULL; if(vec.size() <=0) return root; root = helper(vec,0,vec.size()-1); } void Inorder(BinTree* root) { if(root == NULL) return ; Inorder(root->left); cout<<root->value<<endl; Inorder(root->right); } int main() <span style="font-family:'Helvetica Neue',arial,sans-serif;">{</span> <span style="font-family:'Helvetica Neue',arial,sans-serif;"> </span> BinTree* second=NULL; <span style="font-family:'Helvetica Neue',arial,sans-serif;"> </span> int sec[]={4,5,6,10,14,16}; vector<int> vec(sec,sec+sizeof(sec)/sizeof(int)); second = ConvertBST(vec); Inorder(second); return 0; }
时间: 2024-10-14 10:25:50