leetcode-109-Convert Sorted List to Binary Search Tree
来源:互联网 发布:软件开发招标 编辑:程序博客网 时间:2024/05/01 02:59
#include <iostream>using namespace std;/* 题目要求: Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 这道题可以与108的根据有序数组构建平衡二叉搜索树作对比,由于有序数组可以 随机访问元素,所以108那道题可以用自顶向下的方法构建树。但是单链表不能随机 访问,只能顺序访问,根据这个数据结构的特点,自顶向下的建树顺序不太妥当,应当 用自底向上的建树顺序,从左向右扫描链表,由于比中间数字小的数字都是该数字的左子树, 所以可以先构建所有可能的右子树,然后构建中间数字的节点,再考虑其右子树。 *//** * Definition for singly-linked list. */struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};/** * Definition for a binary tree node. */struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: TreeNode* sortedListToBST(ListNode* head) { int len = 0; ListNode* cur = head; while (cur) { cur = cur->next; len++; } return bottomUp(head, 0, len - 1); }private: //注意要用引用参数 TreeNode* bottomUp(ListNode* &h, int left, int right){ //如果链表为空,则返回空指针 if (!h) { return NULL; } if (left > right) { return NULL; } int mid = (left + right) / 2; //构建左子树 TreeNode* lChild = bottomUp(h, left, mid - 1); //当前节点 TreeNode* current = new TreeNode(h->val); current->left = lChild; h = h->next; //构建右子树 TreeNode* rChild = bottomUp(h, mid + 1, right); current->right = rChild; return current; }};int main(int argc, const char * argv[]) { ListNode one(1); ListNode two(2); ListNode three(3); one.next = &two; two.next = &three; Solution s; TreeNode *res = s.sortedListToBST(&one); return 0;}
0 0
- LeetCode(109)Convert Sorted List to Binary Search Tree
- LeetCode: Convert Sorted List to Binary Search Tree [109]
- LeetCode 109 Convert Sorted List to Binary Search Tree
- LeetCode 109 Convert Sorted List to Binary Search Tree
- [leetcode 109] Convert Sorted List to Binary Search Tree
- [LeetCode 109]Convert Sorted List to Binary Search Tree
- leetcode || 109、Convert Sorted List to Binary Search Tree
- 【leetcode】【单链表】【109】Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree - LeetCode 109
- leetcode[109]:Convert Sorted List to Binary Search Tree
- LeetCode(109) Convert Sorted List to Binary Search Tree
- Leetcode #109 Convert Sorted List to Binary Search Tree
- leetcode 109: Convert Sorted List to Binary Search Tree
- LeetCode(109) Convert Sorted List to Binary Search Tree
- 109 Convert Sorted List to Binary Search Tree [Leetcode]
- LeetCode—109 Convert Sorted List to Binary Search Tree
- 【LEETCODE】109-Convert Sorted List to Binary Search Tree
- LeetCode 109 Convert Sorted List to Binary Search Tree
- 公共技术点之 Java 注解 Annotation
- 最长公共子序列(连续)
- 数据存储类型
- Hadoop 1.x HDFS常见Shell命令
- matlab实现相位解包裹
- leetcode-109-Convert Sorted List to Binary Search Tree
- MySQL学习笔记3(创建、修改、删除表)
- hdu 1598 find the most comfortable road(并查集判断图联通)
- MySQL引擎
- 改变文件所有者
- windows10中简单的dos环境操作
- TableView
- C++封装学习(二)
- Hdu oj 1257 最少拦截系统I(贪心)