leetcode第一刷_Unique Binary Search Trees II

來源:互聯網
上載者:User

可能沒想到簡單方法的人,在上一題中就把這一題給做了。怎樣把所有的樹都產生出來呢?方法肯定用的是遞迴,但是有個致命的問題,如果做好了根節點再遞迴,那麼出來的很多樹都公用一個根節點,結果肯定是亂七八糟的。

怎麼做?其實做法跟之前求個數在思想上是高度統一的,先把所有的左右子樹都求出來,然後把它們之間的所有組合都串連到一個建立立出來的根節點,既然是分開左右子樹,很容易想到類似二分的思想,每次指定的不是一個位置,而是一個範圍。我一開始還想著先把n個數放到數組裡面再遞迴,脫了褲子放屁啊。

通過對演算法思想的描述,“先確定左右子樹,再添加根節點”,很容易想到使用類似後序遍曆的編碼格式。

class Solution {public:    vector<TreeNode *> buildTrees(int beg, int end){        vector<TreeNode *> res, left, right;        if(beg>end){            res.push_back(NULL);            return res;        }        for(int i=beg;i<=end;i++){            left = buildTrees(beg, i-1);            right = buildTrees(i+1, end);            for(int j=0;j<left.size();j++){                for(int k=0;k<right.size();k++){                    TreeNode *root = new TreeNode(i+1);                    root->left = left[j];                    root->right = right[k];                    res.push_back(root);                }            }        }        return res;    }    vector<TreeNode *> generateTrees(int n) {        return buildTrees(0, n-1);    }};



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.