网络营销的网站分类有,电脑之家,网站后台空白,免费的云空间牛客题霸 [将升序数组转化为平衡二叉搜索树]C题解/答案
题目描述
给出一个升序排序的数组#xff0c;将其转化为平衡二叉搜索树#xff08;BST#xff09;.
题解#xff1a;
二叉搜索树的定义#xff1a; 二叉搜索树或者是一棵空树#xff0c;或者是具有下列性质的二…牛客题霸 [将升序数组转化为平衡二叉搜索树]C题解/答案
题目描述
给出一个升序排序的数组将其转化为平衡二叉搜索树BST.
题解
二叉搜索树的定义 二叉搜索树或者是一棵空树或者是具有下列性质的二叉树 1若左子树不空则左子树上所有结点的值均小于或等于它的根节点的值 2若右子树不空则右子树上所有结点的值均大于或等于它的根结点的值 3左、右子树也分别为二叉搜索树 平衡的定义就是指二叉树的子树高度之差不能超过1。 如果要从一个有序数组中选择一个元素作为根节点我们应该选择中间元素作为根节点因为这两离左右两端距离相近高度差不会太大 选择了中间元素作为根结点后剩下的元素分为两部分可以看作是两个数组。剩下的元素在根结点左边的作为左子树右边的作为右子树。 其实这就是前序遍历的步骤
代码
/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/class Solution {
public:/*** * param num int整型vector * return TreeNode类*/TreeNode* sortedArrayToBST(vectorint num) {// write code hereif(!num.size()) return NULL;return preOrder(num,0,num.size()-1,num.size());}TreeNode* preOrder(vectorint num,int left,int right,int n){// if(leftright) return nullptr;if(leftright) return NULL;int mid(rightleft1)/2;TreeNode* rootnew TreeNode(num[mid]);root-leftpreOrder(num,left,mid-1,n);root-rightpreOrder(num,mid1,right,n);return root;}
};