二叉树:
balance Tree:
对于每个节点,其左右子树的高度差不超过1(<=1)
BST tree:
对于 BST Tree,对于每个父节点,其左子节点小于父节点
其右子节点大于父节点
Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order,
balance Tree:
对于每个节点,其左右子树的高度差不超过1(<=1)
BST tree:
对于 BST Tree,对于每个父节点,其左子节点小于父节点
其右子节点大于父节点
Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order,
convert it to a height balanced BST.
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode
{
int val;
TreeNode *l;
TreeNode *r;
TreeNode(int x) :val(x), l(nullptr), r(nullptr) {}
};
class Solution
{
public:
TreeNode *SortarrayToBST(vector<int>& vec)
{
return StoBST(vec.begin(), vec.end());
}
template<typename sty> //sty是类型
TreeNode *StoBST(sty left, sty right)
{
auto length = distance(left, right);
if (length <= 0) return nullptr;
auto mid = left + length / 2;
TreeNode *Root = new TreeNode(*mid);
Root->l = StoBST(left, mid);
Root->r = StoBST(mid + 1, right);
return Root;
}
void midorder(TreeNode *Root) //中序遍历
{
if (Root != nullptr)
{
midorder(Root->l);
cout << Root->val<<",";
midorder(Root->r);
}
}
};
int main()
{
Solution s1;
vector<int> vec{ 1, 2, 3, 4, 5 };
cout << "BST and Balance Tree:";
s1.midorder(s1.SortarrayToBST(vec));
cout << endl;
system("pause");
return 0;
}