二叉樹之二叉排序樹

二叉排序樹(Binary Sort Tree),又稱二叉查找樹(Binary Search Tree),亦稱二叉搜索樹。


定義
二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別爲二叉排序樹;


查找
步驟:
若根結點的關鍵字值等於查找的關鍵字,成功。
否則,若小於根結點的關鍵字值,遞歸查左子樹。
若大於根結點的關鍵字值,遞歸查右子樹。

若子樹爲空,查找不成功。



描述

給出 n,問由 1...n 爲節點組成的不同的二叉查找樹有多少種?

您在真實的面試中是否遇到過這個題?  

樣例

給出n = 3,有5種不同形態的二叉查找樹:

1           3    3       2      1
 \         /    /       / \      \
  3      2     1       1   3      2
 /      /       \                  \
2     1          2                  3


class Solution {
public:
    /**
     * @param n: An integer
     * @return: An integer
     */
    int numTrees(int n) {
        // write your code here
        int i, j;
        int dp[n + 1] = {0};
        dp[0] = 1;
        for (i = 1; i <= n; ++i) {
            for (j = 0; j < (i - 1) / 2; ++j) {
                dp[i] += dp[j] * dp[i - j - 1] * 2;
            }
            dp[i] += dp[j] * dp[i - j - 1] * (i % 2 == 0 ? 2 : 1);
        }

        return dp[n];
    }
};

dp[n] =∑(dp[i] * dp[n - i - 1]) 

i = 0; i->n - 1;

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