给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
#include<iostream>
#include<Queue>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* a[5];
int t=0;
struct TreeNode *creatnewnode(int num){
struct TreeNode* temp =(TreeNode*)malloc(sizeof(struct TreeNode));
temp->right = NULL;
temp->left = NULL;
temp->val = num;
return temp;
}
struct TreeNode* recursionsortedarray(int* nums, int lo, int hi)
{
if (lo >= hi)
{
return NULL;
}
int mid = (hi + lo) / 2;
struct TreeNode* root = creatnewnode(nums[mid]);
root->left = recursionsortedarray(nums, lo, mid);
root->right = recursionsortedarray(nums, mid + 1, hi);
a[t++]=root;
return root;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
return recursionsortedarray(nums, 0, numsSize);
}
void LevelOrderTraversal(TreeNode* BT)
{
TreeNode* T;
queue<TreeNode*> Q; //声明一个队列
if (BT == NULL)
return; //如果树为空,直接返回
Q.push(BT); //将根节点入队
while (!Q.empty())
{
T=Q.front();
cout<<T->val<<" ";
Q.pop();
if (T->left) Q.push(T->left); //若左儿子不为空,将其入队
if (T->right) Q.push(T->right); //若右儿子不为空,将其入队
}
}
int main(){
int* nums=new int[5];
for(int i=0;i<5;i++)
cin>>nums[i];
sortedArrayToBST(nums,5);
/*for(int i=0;i<5;i++)
cout<<a[i]->val;
cout<<endl;*/
LevelOrderTraversal(a[4]);
system("pause");
}
最后那个按[0,-3,9,-10,null,5]这个输出的null不知道怎么加,再说吧!