建设人才网站,做网站公司-汉狮网络,建筑论坛,全国网站直播平台被摧毁最小高度树
实例要求
1、给定一个有序整数数组#xff0c;元素各不相同且按升序排列#xff1b;2、编写一个算法#xff0c;创建一棵高度最小的二叉搜索树#xff1b;示例:
给定有序数组: [-10,-3,0,5,9],一个可能的答案是#xff1a;[0,-3,9,-10,null,5]#xff0c;它…最小高度树
实例要求
1、给定一个有序整数数组元素各不相同且按升序排列2、编写一个算法创建一棵高度最小的二叉搜索树示例:
给定有序数组: [-10,-3,0,5,9],一个可能的答案是[0,-3,9,-10,null,5]它可以表示下面这个高度平衡二叉搜索树0 / \ -3 9 / / -10 5 实例分析
一、算法思想使用递归来实现将有序数组转换为二叉搜索树二、具体步骤1、找到数组的中间元素将其作为根节点2、将数组分成左右两部分分别递归地构建左子树和右子树3、返回根节点
示例代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/struct TreeNode* sortedArrayToBSTUtil(int* nums, int start, int end) {if (start end) {return NULL;}int mid start (end - start) / 2; // 找到中间元素的索引struct TreeNode* root (struct TreeNode*)malloc(sizeof(struct TreeNode));root-val nums[mid]; // 中间元素作为根节点的值root-left sortedArrayToBSTUtil(nums, start, mid - 1); // 递归构建左子树root-right sortedArrayToBSTUtil(nums, mid 1, end); // 递归构建右子树return root;
}struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {if (numsSize 0) {return NULL;}return sortedArrayToBSTUtil(nums, 0, numsSize - 1);
}
运行结果