给定一个数组,数组中存放的是一颗二叉搜索树的后续遍历的结果。重建这个二叉搜索树,并返回其根节点。
nums = {2,3};
struct ListNode
{
int val;
ListNode *left;
ListNode *right;
ListNode(int num):val(num),left(nullptr),right(nullptr){}
};
ListNode *reBuildBST(std::vector<int> &nums,int left, int right)
{
if(left > right) return nullptr;
//后续遍历的结果最后一个元素 肯定是root节点
ListNode *root = new ListNode(nums[right]);
//只剩一个节点时,直接返回
if(left == right) return root;
//将数组分割成两部分,一部分元素都比根节点小,一部分都比根节点大
int mid = -1;
for(int i = 0;i <= right-1;i++)
{
if(nums[i] < nums[right])
mid = i;
}
//分别重建左子树和右子树
root->left = reBuildBST(nums,left,mid);
root->right = reBuildBST(nums,mid+1,right-1);
return root;
}