20170515_建立排序二叉树BST
//108. Convert Sorted Array to Binary Search Tree
//Given an array where elements are sorted in ascending order,
//convert it to a BST.
//排序二叉树!
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),left(nullptr),right(nullptr) {}
};
void Outdata(vector<int> &a)
{
auto beg=a.begin();
for(; beg!=--a.end(); ++beg)
cout<<*beg<<",";
cout<<*beg<<endl;
}
class Solution
{
public:
//中序遍历排序二叉树
void InOrder(TreeNode *root)
{
TreeNode *p=root;
if(p==nullptr)
return;
else
{
InOrder(p->left);
cout<<p->val<<",";
InOrder(p->right);
}
}
//排序二叉树插入一个节点
void InsertBST(TreeNode * &root, TreeNode *s) //谨记:这是 * + &
{
if(root==nullptr)
root=s;
else if(s->val < root->val)
InsertBST(root->left,s);
else
InsertBST(root->right,s);
}
//建立排序二叉树
TreeNode *CreatBST(vector<int> &nums)
{
if(nums.size()==0)
return nullptr;
else
{
TreeNode *root=nullptr;
for(int i=0; i<nums.size(); ++i)
{
TreeNode *s=new TreeNode(nums[i]);
InsertBST(root,s);
}
return root;
}
}
// Convert Sorted Array to Binary Search Tree
TreeNode *sortedArrayToBST(vector<int> &nums)
{
TreeNode *root=CreatBST(nums);
return root;
}
};
int main()
{
cout<<"按顺序输入升序的数组:"<<endl;
int ch;
vector<int> a;
while(cin>>ch)
a.push_back(ch);
sort(a.begin(),a.end());
cout<<"输入的数据是:"<<endl;
Outdata(a);
cout<<"输入的数据输出完成."<<endl<<endl;
Solution example;
TreeNode *root;
root=example.sortedArrayToBST(a);
cout<<"排序二叉树输出的数据是:"<<endl;
example.InOrder(root);
cout<<endl;
cout<<"排序二叉树输出数据完成."<<endl<<endl;
system("pause");
return 0;
}