Convert Sorted List to Binary Search Tree
OJ: https://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
思想: 以中间点为根节点,按先序顺序来创建 。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ ListNode* findMiddleNode(ListNode *head, int length) { if(length <= 0) return NULL; int mid = (length+1) / 2; for(int i = 1; i < mid; ++i) head = head->next; return head; } TreeNode* createBST(ListNode *head, int length) { ListNode *pMid = findMiddleNode(head, length); TreeNode *root = NULL; if(pMid) { root = new TreeNode(pMid->val); root->left = createBST(head, (length-1) >> 1); root->right = createBST(pMid->next, length / 2); } return root; } int getLength(ListNode *head) { int len = 0; while(head) { len++; head = head->next; } return len; } class Solution { public: TreeNode *sortedListToBST(ListNode *head) { return createBST(head, getLength(head)); } };
Convert Sorted Array to Binary Search Tree
OJ: https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
思想,同上。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ TreeNode* createBST(vector<int> &num, int l, int h) { if(l > h) return NULL; int mid = (l+h)/2; TreeNode *root = new TreeNode(num[mid]); root->left = createBST(num, l, mid-1); root->right = createBST(num, mid+1, h); return root; } class Solution { public: TreeNode *sortedArrayToBST(vector<int> &num) { return createBST(num, 0, num.size()-1); } };