LeetCode OJ Convert Sorted List to Binary Search Tree
来源:互联网 发布:arch linux chroot 编辑:程序博客网 时间:2024/06/06 06:42
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
之前在Sicily做过,就是实现一个AVL树了。
struct TreeNodeNew { int val; TreeNodeNew *left; TreeNodeNew *right;int bf;TreeNodeNew(int val = 0, TreeNodeNew * left = NULL, TreeNodeNew * right = NULL, int bf = 0) {this->val = val;this->left = left;this->right = right;this->bf = bf;}};class Solution {public:TreeNode * sortedListToBST(ListNode * head) {TreeNodeNew * ansNew = NULL;ListNode * temp = head;while (temp) {avlInsert(ansNew, temp->val);temp = temp->next;}TreeNode * ans = NULL;if (ansNew) reBuild(ansNew, ans);return ans;}void reBuild(TreeNodeNew * &nowNew, TreeNode * &now) {now = new TreeNode(nowNew->val);if (nowNew->left) reBuild(nowNew->left, now->left);if (nowNew->right) reBuild(nowNew->right, now->right);}inline int MAX(int a, int b) {if (a > b) return a + 1;return b + 1;}void avlInsert(TreeNodeNew * &root, const int entry) {bool unbalanced;avlInsertInside(root, entry, unbalanced);}void lR(TreeNodeNew * &parent) {TreeNodeNew * child = parent->left;if (child->bf == 1) {parent->left = child->right;child->right = parent;parent->bf = 0;parent = child;}else {TreeNodeNew * grandChild = child->right;parent->left = grandChild->right;child->right = grandChild->left;grandChild->right = parent;grandChild->left = child;switch (grandChild->bf) {case 0:parent->bf = child->bf = 0;break;case 1:parent->bf = -1;child->bf = 0;break;case -1:parent->bf = 0;child->bf = 1;}parent = grandChild;}parent->bf = 0;}void rR(TreeNodeNew * &parent) {TreeNodeNew * child = parent->right;if (child->bf == -1) {parent->right = child->left;child->left = parent;parent->bf = 0;parent = child;}else {TreeNodeNew * grandChild = child->left;parent->right = grandChild->left;child->left = grandChild->right;grandChild->right = child;grandChild->left = parent;switch (grandChild->bf) {case 0:parent->bf = child->bf = 0;break;case -1:parent->bf = 1;child->bf = 0;break;case 1:parent->bf = 0;child->bf = -1;}parent = grandChild;}parent->bf = 0;}void avlInsertInside(TreeNodeNew * &parent, const int x, bool & unbalanced) {if (parent == NULL) {parent = new TreeNodeNew(x, 0, 0, 0);unbalanced = true;}else if (x < parent->val) {avlInsertInside(parent->left, x, unbalanced);if (unbalanced) {switch (parent->bf) {case 0:parent->bf = 1;break;case -1:parent->bf = 0;unbalanced = false;break;case 1:lR(parent);unbalanced = false;}}}else if (x > parent->val) {avlInsertInside(parent->right, x, unbalanced);if (unbalanced) {switch (parent->bf) {case 0:parent->bf = -1;break;case 1:parent->bf = 0;unbalanced = false;break;case -1:rR(parent);unbalanced = false;}}}else {unbalanced = false;}}};
0 0
- LeetCode OJ:Convert Sorted List to Binary Search Tree
- LeetCode OJ - Convert Sorted List to Binary Search Tree
- LeetCode OJ Convert Sorted List to Binary Search Tree
- 【LeetCode】Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
- LeetCode[Tree]: Convert Sorted List to Binary Search Tree
- [leetcode][list][dfs] Convert Sorted List to Binary Search Tree
- LeetCode OJ:Convert Sorted Array to Binary Search Tree
- LeetCode OJ - Convert Sorted Array to Binary Search Tree
- [LeetCode OJ]Convert Sorted Array to Binary Search Tree
- <LeetCode OJ> 109 / 108 Convert Sorted ( List / Array ) to Binary Search Tree
- LeetCode: Convert Sorted List to Binary Search Tree
- [LeetCode]Convert Sorted List to Binary Search Tree
- LeetCode : Convert Sorted List to Binary Search Tree
- [Leetcode] Convert Sorted List to Binary Search Tree
- Leetcode: Convert Sorted List to Balanced Binary Search Tree
- [LeetCode] Convert Sorted List to Binary Search Tree
- leetcode 66: Convert Sorted List to Binary Search Tree
- leetcode Convert Sorted List to Binary Search Tree
- 每个程序员需掌握的20个代码命名小贴士
- 程序员笑话
- NYOJ 2 括号配对问题(数据结构)
- 基于nginx搭建phpmyadmin环境
- 用Maven插件生成Mybatis代码
- LeetCode OJ Convert Sorted List to Binary Search Tree
- android adb devices offline 解决.
- QT正则表达式:
- [ZZ]最小覆盖子串算法
- 海量数据处理算法—Bloom Filter
- 用虚拟机安装了红帽后,我确实没设置用户名密码,但现在一打开就让输入用户名密码。这种情况该怎么办??
- ios客户端学习-NSTimer刷新时间
- Java中asmx的全称
- 密码输入框-密码限制:字母,数字,下划线