有序递增链表转化为平衡的二叉搜索树(LeetCode: Convert Sorted List to Binary Search Tree )
来源:互联网 发布:vb as boolean 编辑:程序博客网 时间:2024/03/29 03:33
首先,这里是有序递增链表,那么链表的中间节点一定是二叉搜索树的根节点,左侧一半为左子树,右侧一半为右子树,这可以构建一个递归的过程。那么如何找到链表的中间节点呢?
方法1:将链表转化为vector(增加了额外的存储空间用来方便获取中间节点,构建递归过程)
class Solution {public:TreeNode *sortedListToBST(ListNode *head) {if(head==NULL)return NULL;vector<int> vec;ListNode *current = head;while(current){vec.push_back(current->val);current = current->next;}return constructTree(vec,0,vec.size()-1);}private:TreeNode *constructTree(vector<int> &vec,int start,int end){if(start>end)return NULL;int mid = (start+end)/2;TreeNode *root = new TreeNode(vec[mid]);root->left = constructTree(vec,start,mid-1);root->right = constructTree(vec,mid+1,end);return root;}};
方法2:二叉搜索树的中序遍历结果就是有序递增序列,可以利用中序遍历的方法将有序链表转成二叉搜索树,在遍历到树上的某一节点时,读取链表的值(没有额外分配内存,效率优于方法1)。
class Solution {public: TreeNode *sortedListToBST(ListNode *head) { if(head==NULL)return NULL;ListNode *current = head;int len = 1;while(current=current->next)++len;return inOrder(head,0,len-1);}private:TreeNode *inOrder(ListNode *&head,int left,int right){//这里需要使用指针的引用if(left>right)return NULL;int mid = (left+right)/2;TreeNode *root = new TreeNode(0);root->left = inOrder(head,left,mid-1);root->val = head->val;head = head->next;root->right = inOrder(head,mid+1,right);return root;}};
0 0
- 有序递增链表转化为平衡的二叉搜索树(LeetCode: Convert Sorted List to Binary Search Tree )
- LeetCode OJ 之 Convert Sorted List to Binary Search Tree(把有序链表转化为二叉搜索树)
- Convert Sorted List to Binary Search Tree (递增的链表转化成高度平衡的二叉查找树)【leetcode】
- Convert Sorted List to Binary Search Tree 将有序链表转化为平衡二叉排序树
- 有序数组转换为平衡二叉搜索树(Convert Sorted Array to Binary Search Tree)
- 108. Convert Sorted Array to Binary Search Tree 有序数组转换为平衡二叉搜索树
- LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)
- LeetCode OJ 之 Convert Sorted Array to Binary Search Tree(把有序数组转化为二叉搜索树)
- [leetcode]Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树 C语言)
- leetcode 109. Convert Sorted List to Binary Search Tree 链表构造平衡二叉搜索树 + DFS
- Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
- [LeetCode]108. Convert Sorted Array to Binary Search Tree(升序数组转化为平衡二叉树)
- LeetCode | Convert Sorted List to Binary Search Tree(链表转换成二叉搜索树)
- LeetCode | Convert Sorted Array to Binary Search Tree(有序数组转换成平衡二叉树搜索树)
- 108. Convert Sorted Array to Binary Search Tree | 有序数组生成平衡二叉搜索树
- Leetcode 108 Convert Sorted Array to Binary Search Tree 有序数组构造平衡二叉查找树
- (将有序数组转成平衡二叉树)LeetCode#108. Convert Sorted Array to Binary Search Tree
- Convert Sorted Array to Binary Search Tree (递增数组建高度平衡的二叉查找树)【leetcode】
- 浅显易懂的动态规划入门
- linux下jfreechart乱码问题
- Build/Run Instructions for Codec Engine Examples
- Android每个Activity键盘状态设置 android:windowSoftInputMode
- 集成电路的基本知识
- 有序递增链表转化为平衡的二叉搜索树(LeetCode: Convert Sorted List to Binary Search Tree )
- javaweb:判断当前请求是否为移动设备访问
- 初探Linux网络协议栈
- solr配数据库介绍
- DataStructure-插入排序
- Windows Socket 1.1库函数大全
- java解析Excel
- 六角填数
- 支付宝SDK---openssl rsa.h file not found