【Leetcode長征系列】Convert Sorted Array to Binary Search Tree

原題:

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


【複習時間】:平衡二叉樹(Balanced Binary Tree)具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。常用算法有紅黑樹、AVL、Treap、伸展樹等。在平衡二叉搜索樹中,我們可以看到,其高度一般都良好地維持在O(log2n),大大降低了操作的時間複雜度。

參考鏈接:www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html


思路:一開始想的過於複雜了,以爲涉及到了zigzag之類的東西。但其實這道題用遞歸就可以完成。其中有很多需要注意的細節:

1. TreeNode *root=NULL;指針一定要初始化不然一定會runtime error!。

2. buildBST(vector<int> &num, TreeNode *&root, int left, int right) 傳遞樹節點的指針時必須還有個引用符號,即*&,光有*或是光有&都是傳遞不了指針的,主函數最後的返回結果會成爲空。

代碼:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode *sortedArrayToBST(vector<int> &num) {
        TreeNode *root=NULL;
        if(num.size()>0)
            buildBST(num, root, 0, num.size()-1);
        return root;
    }
    void buildBST(vector<int> &num, TreeNode *&root, int left, int right){
        if(left>right) return;
        int mid = (left+right)/2;
        root = new TreeNode(num[mid]);
        buildBST(num, root->left, left, mid-1);
        buildBST(num, root->right, mid+1, right);
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章