LeetCode :: Convert Sorted Array (link list) to Binary Search Tree [tree]

來源:互聯網
上載者:User

標籤:leetcode   c++   遞迴   tree   

1.Given an array where elements are sorted in ascending order, convert it to a height balanced BST.


2.Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.


這裡兩道題目,是連在一起的兩題,給你一個排好序(升序)的數組或者鏈表,將它們轉為一棵平衡二叉樹。假設不排好序的話,一組隨機輸入的資料,就必須採用RBT或者AVL樹,這樣操作會變得更複雜,涉及到旋轉,但是這裡排好序了。所以,只要找到中位元,作為根,然後遞迴地根據中位元的左、右數列來構建左右子樹;


兩題的思路都是如上所述, 唯一的區別就是,鏈表尋找中位元會麻煩一些,需要引入fast、slow兩個指標,來尋找中位元,代碼如下:


1.Array

class Solution {public:    TreeNode *Tree(int left, int right, vector<int> &num){        TreeNode *root = NULL;        if (left <= right){            int cen = (left + right) / 2;            root = new TreeNode(num[cen]);            root->left = Tree(left, cen - 1, num);            root->right = Tree(cen + 1, right, num);        }        return root;    }        TreeNode *sortedArrayToBST(vector<int> &num) {        TreeNode *T = NULL;        int N = num.size();        T = Tree(0, N - 1, num);        return T;    }};

2.link-list

class Solution {public:    ListNode *findMid(ListNode *head){        //這裡如果鏈表中只有兩個數字,則mid返回的是head->next.        if (head == NULL || head -> next == NULL)            return head;        ListNode *fast, *slow, *pre;        fast = slow = head;        pre = NULL;        while (fast && fast->next){            pre = slow;            slow = slow->next;            fast = fast->next->next;        }        pre->next = NULL;        return slow;    }        TreeNode *buildTree(ListNode *head){        TreeNode *root = NULL;        ListNode *mid = NULL;        if (head){            mid = findMid(head);            root = new TreeNode(mid->val);            if (head != mid){                root->left = buildTree(head);                root->right = buildTree(mid->next);            }        }        return root;            }        TreeNode *sortedListToBST(ListNode *head) {        TreeNode *T;        T = buildTree(head);        return T;    }};


LeetCode :: Convert Sorted Array (link list) to Binary Search Tree [tree]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.