1. 程式人生 > >LeetCode96_Unique Binary Search Trees(求1到n這些節點可以組成多少種不同的二叉查詢樹) Java題解

LeetCode96_Unique Binary Search Trees(求1到n這些節點可以組成多少種不同的二叉查詢樹) Java題解

題目:

Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

For example,
Given n = 3, there are a total of 5 unique BST's.

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3
解題:

用遞迴的思想,當只有0個或是1個節點的時候,只有一種;n個節點的時候有f(n)種:

左邊可以有n-1個節點,右邊0個節點,根據對稱性可以左右互換,這時候有2*f(n-1)*f(0);

一邊1個,另一邊n-2個,這時候有2*f(1)*f(n-2);

一邊兩個,一邊N-3個,這時候有2*f(2)*f(n-3);

。。。。。。

如果n為奇數,兩邊都是n/2個,這時候有f(n/2)*f(n/2),如果n為偶數,一邊n/2一邊(n/2+1)個,為2*f(n/2)*f(n/2+1);

程式碼:

  public static int numTrees(int n) {
    	 if(n==1||n==0)
    		 return 1;
    	 int sum=0;
    	 if(n%2==0)
    	 {
    		 for(int k=n-1;k>=n/2;k--)
        	 {
        		 sum+=2*numTrees(k)*numTrees(n-1-k);
        	 }
        	 return sum;
    	 
    	 }
    	 else {
    		 for(int k=n-1;k>n/2;k--)
        	 {
        		 sum+=2*numTrees(k)*numTrees(n-1-k);
        	 }
        	 return sum+numTrees(n/2)*numTrees(n/2);
		}
        
    }


相關推薦

LeetCode96_Unique Binary Search Trees(1到n這些節點可以組成多少不同查詢) Java題解

題目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a t

LeetCode96_Unique Binary Search Trees(1到n這些節點能夠組成多少不同查找) Java題解

binary == -1 value -a 不同 truct ota -h 題目: Given n, how many structurally unique BST‘s (binary search trees) that store values 1...n?

JS 實現查詢(Binary Search Tree)

知識點 二叉查詢樹,也稱二叉搜尋樹、有序二叉樹(英語:ordered binary tree)是指一棵空樹 任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 任意節點的左、

1064 Complete Binary Search Tree (30 分)(查詢

  中序遍歷建樹 #include<bits/stdc++.h> using namespace std; const int N=1e3+10; int s[N]; int n; int tree[N]; int cnt; void inorder(int root)

Leetcode 98 Validate Binary Search Tree 驗證查詢

題目描述 Given a binary tree, determine if it is a valid binary search tree (BST). 給出一個二叉樹,判斷其是否是合法的二叉查詢樹。 解題思路 首先,我們來看二叉查詢樹的

173. Binary Search Tree Iterator(查詢迭代器)的C++解法

注意是二叉查詢樹,意味著左子樹<根<右子樹,因此,如果沒有特殊要求,只需要中序遍歷樹,將每個結點儲存即可。 但是題目要求空間複雜度為O(h),h是二叉查詢樹的深度,因此考慮每次只放一部分樹的結點入棧。首先我們知道根的左子樹的左子樹的左子樹...一直到最左的左子樹L一定是最小值,那

資料機構與演算法:查詢Binary Search Tree)Java實現

個人總結,如有錯誤,感謝指正 二叉查詢樹(Binary Search Tree) 一、簡介 二叉樹(Binary Tree):每個節點最多有兩個子節點的樹。 二叉查詢樹(binary srarch tree):具有如下性質的二叉樹稱為二叉查詢樹

lintcode validate-binary-search-tree 驗證查詢

問題描述 筆記 程式碼1是用到中序遍歷,要求中序遍歷是嚴格的增序。用到了輔助空間。 程式碼2是leetcode上面的解法,用到了prev指標記錄前一個節點,省下了輔助空間,而且要注意prev傳

查詢binary search tree)——python實現

二叉查詢樹(binary search tree) 顧名思義二叉查詢樹中每個節點至多有兩個子節點,並且還對儲存於每個節點中的關鍵字值有個小小的要求, 即只要這個節點有左節點或右節點,那麼其關鍵字值總的大於其左節點的關鍵字值,小於其右節點的關鍵字值,如下圖: 因為樹的結

查詢Binary Search Tree)

二叉樹的一個重要的應用是他們在查詢中的使用。 以下是二叉查詢樹的查詢程式碼 #include <stdio.h> int main() { typedef struct Node{ int data; struct Node *lchild; struct No

查詢Binary Search Tree)

private void mirror(Node rootNode) { if (rootNode != null) { // do the sub-trees mirror(rootNode.leftChild); mirror(rootNod

系列---包含n個節點查詢的種類數

題目1 求包含n個節點的二叉查詢樹的種類數; 方法1 設dp[i]表示共有i個節點時,能產生的BST樹的個數 n == 0 時,空樹的個數必然為1,因此dp[0] = 1 n == 1 時,只有1這個根節點,數量也為1,因此

【面試題】包含n個節點(從1到n,n個節點)的所有搜尋

二叉搜尋樹滿足的條件 當前根節點的值大於左子樹節點的值 當前根節點的值小於右子樹節點的值 左右子樹同樣是二叉搜尋樹 根據上述規則可以看出,根節點值不同,形成的二叉搜尋樹就不同,那麼[1:n]範圍內的n個數就有n個不同的選擇。 [1:i−1]這i-1

動態查詢---->查詢(Binary Search Tree)

二叉查詢樹(Binary Search Tree) 一、二叉查詢樹的定義 ----或是一棵空樹;或者是具有如下性質的非空二叉樹:  (1)左子樹的所有結點均小於根的值;  (2)右子樹的所有結點均大於根的值; 結論:中序遍歷一棵二叉查詢樹可以得到一個按關鍵字遞增的有序序

【LeetCode】Validate Binary Search Tree 驗證查詢

驗證二叉查詢樹 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。 節點的右子樹中的值要嚴格大於該節點的值。 左右子樹也必須是二叉查詢樹。 一個節點的樹也是二叉查詢樹。 樣例

LeetCode程式設計訓練 - 查詢(Binary Search Tree)

二叉查詢樹基礎 二叉查詢樹(BST)滿足這樣的性質,或是一顆空樹;或左子樹節點值小於根節點值、右子樹節點值大於根節點值,左右子樹也分別滿足這個性質。 利用這個性質,可以迭代(iterative)或遞迴(recursive)地用O(lgN)的時間複雜度在二叉查詢樹中進行值查詢。   相關Lee

查詢中尋找兩個節點,使它們的和為一個給定值

給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。 使用中序遍歷得到有序陣列之後,再利用雙指標對陣列進行查詢。 應該注意到,這一題不能用分別在左右子樹兩部分來處理這種思想,因為兩個待求的節點可能分別在左右子樹中。 /** *

搜尋的最小節點絕對值之差/在查詢中尋找兩個節點,使它們的和為一個給定值/找出 BST 中的所有眾數(出現頻率最高的元素)。

關於二叉樹的數值運算,一般考慮借用中序遍歷為陣列;再進行計算的思想。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

演算法-查詢-刪除節點

/**  * Definition of TreeNode:  * public class TreeNode {  *     public int val;  *     public TreeNode left, right;  *     public TreeNode(int val) {  * 

刪除查詢節點

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.刪除節點函式需要有節點的父節點和結點兩個屬性,並且分兩種情況:<