動態規劃(不同的二叉搜尋樹)

2021-10-02 15:09:13 字數 1566 閱讀 7642

考慮 [

] 的所有解

null

考慮 [

1] 的所有解

1考慮 [12

] 的所有解

2/11

\ 2

考慮 [12

3] 的所有解

3/2/1

2/ \ 13

3/1 \

21 \

3/21 \2\

3

思路:當我們增加乙個大於之前的數字時,新增的數字出現的位置只能是根節點或根節點的右孩子、右孩子的右孩子等等。接著,新數字所在位置原來的子樹,改為當前插入數字的左孩子即可(因為他是最大的)。

對於下邊的解 

2/1然後增加 3

1.把 3 放到根節點

3/2/1

2. 把 3 放到根節點的右孩子

2/ \ 13

對於下邊的解

1 \

2然後增加 3

1.把 3 放到根節點

3/1\

22. 把 3 放到根節點的右孩子,原來的子樹作為 3 的左孩子 1\

3/23. 把 3 放到根節點的右孩子的右孩子

1 \2\

3

code

public list

generatetrees

(int n)

pre.

add(null)

;for

(int i=

1;i<=n;i++

) right = right.right;

}//到達null提前結束

if(right == null)

//儲存當前右孩子的位置的子樹作為插入節點的左孩子

treenode righttree = right.right;

insert =

newtreenode

(i);

right.right = insert;

//右孩子是插入的節點

insert.left = righttree;

//插入節點的左孩子更新為插入位置之前的子樹

//加入結果中

cur.

add(root_copy);}

} pre = cur;

}return pre;

}//複製子樹

private treenode treecopy

(treenode root)

treenode newroot =

newtreenode

(root.val)

; newroot.left =

treecopy

(root.left)

; newroot.right =

treecopy

(root.right)

;return newroot;

}

95 不同的二叉搜尋樹 II,動態規劃

不同的二叉搜尋樹 ii 給定乙個整數 n,生成所有由 1 n 為節點所組成的 二叉搜尋樹 示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2...

96 不同的二叉搜尋樹(動態規劃 數學)

1.問題描述 給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3 2.思路分析 一開始的時候想到使用遞迴的思路解決,可以使用遞迴建立出二叉搜尋樹 以當前...

動態規劃 最優二叉搜尋樹

動態規劃與分治方法類似,都是通過組合子問題來求解原問題。通常用來求解最優化問題,通常按如下4個步驟設計乙個動態規劃演算法 1.刻畫乙個最優解的結構特徵 2.遞迴的定義最優解的值 3.採用自底向上的方法計算最優解的值 4.利用計算出的資訊構造乙個最優解。二叉搜尋樹 optimal binary sea...