一、思路
这两道题都是要求将线性表转换成二叉搜索树,数组转化为二叉搜索树是很简单的,使用标准的二分法即可,不再赘述,之后附上代码。
重点的问题是如何将链表转化为二叉搜索树(这里就不谈将链表转为数组这种只为AC的方法了)。由于不能用下标来访问链表,所以单纯地用数组转树的二分法是不合理的。那么不使用下标,该如何访问链表中点处的节点呢?方法是用快指针和慢指针来查找中点处的节点:快指针每次移动两个节点,慢指针每次移动一个节点,当快指针访问到链尾的时候,慢指针正好指的位置就是中点处的节点。 Over!
二、代码
// 108题代码
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
return helper(nums , 0 , nums.size());
}
TreeNode* helper(vector