考慮 [
] 的所有解
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...