国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

DP入門之不同的二叉搜索樹!

開發 前端
關于什么是二叉搜索樹,我們之前在講解二叉樹專題的時候已經詳細講解過了,也可以看看這篇二叉樹:二叉搜索樹登場!再回顧一波。

不同的二叉搜索樹

題目鏈接:https://leetcode-cn.com/problems/unique-binary-search-trees

給定一個整數 n,求以 1 ... n 為節點組成的二叉搜索樹有多少種?

示例:

思路

這道題目描述很簡短,但估計大部分同學看完都是懵懵的狀態,這得怎么統計呢?

關于什么是二叉搜索樹,我們之前在講解二叉樹專題的時候已經詳細講解過了,也可以看看這篇二叉樹:二叉搜索樹登場!再回顧一波。

了解了二叉搜索樹之后,我們應該先舉幾個例子,畫畫圖,看看有沒有什么規律,如圖:

不同的二叉搜索樹

n為1的時候有一棵樹,n為2有兩棵樹,這個是很直觀的。

不同的二叉搜索樹1

來看看n為3的時候,有哪幾種情況。

當1為頭結點的時候,其右子樹有兩個節點,看這兩個節點的布局,是不是和 n 為2的時候兩棵樹的布局是一樣的啊!

(可能有同學問了,這布局不一樣啊,節點數值都不一樣。別忘了我們就是求不同樹的數量,并不用把搜索樹都列出來,所以不用關心其具體數值的差異)

當3為頭結點的時候,其左子樹有兩個節點,看這兩個節點的布局,是不是和n為2的時候兩棵樹的布局也是一樣的啊!

當2為頭結點的時候,其左右子樹都只有一個節點,布局是不是和n為1的時候只有一棵樹的布局也是一樣的啊!

發現到這里,其實我們就找到了重疊子問題了,其實也就是發現可以通過dp[1] 和 dp[2] 來推導出來dp[3]的某種方式。

思考到這里,這道題目就有眉目了。

dp[3],就是 元素1為頭結點搜索樹的數量 + 元素2為頭結點搜索樹的數量 + 元素3為頭結點搜索樹的數量

元素1為頭結點搜索樹的數量 = 右子樹有2個元素的搜索樹數量 * 左子樹有0個元素的搜索樹數量

元素2為頭結點搜索樹的數量 = 右子樹有1個元素的搜索樹數量 * 左子樹有1個元素的搜索樹數量

元素3為頭結點搜索樹的數量 = 右子樹有0個元素的搜索樹數量 * 左子樹有2個元素的搜索樹數量

有2個元素的搜索樹數量就是dp[2]。

有1個元素的搜索樹數量就是dp[1]。

有0個元素的搜索樹數量就是dp[0]。

所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]

如圖所示:

不同的二叉搜索樹2

此時我們已經找到遞推關系了,那么可以用動規五部曲再系統分析一遍。

1.確定dp數組(dp table)以及下標的含義

dp[i] :1到i為節點組成的二叉搜索樹的個數為dp[i]。

也可以理解是i的不同元素節點組成的二叉搜索樹的個數為dp[i] ,都是一樣的。

以下分析如果想不清楚,就來回想一下dp[i]的定義

2.確定遞推公式

在上面的分析中,其實已經看出其遞推關系, dp[i] += dp[以j為頭結點左子樹節點數量] * dp[以j為頭結點右子樹節點數量]

j相當于是頭結點的元素,從1遍歷到i為止。

所以遞推公式:dp[i] += dp[j - 1] * dp[i - j]; ,j-1 為j為頭結點左子樹節點數量,i-j 為以j為頭結點右子樹節點數量

3.dp數組如何初始化

初始化,只需要初始化dp[0]就可以了,推導的基礎,都是dp[0]。

那么dp[0]應該是多少呢?

從定義上來講,空節點也是一棵二叉樹,也是一棵二叉搜索樹,這是可以說得通的。

從遞歸公式上來講,dp[以j為頭結點左子樹節點數量] * dp[以j為頭結點右子樹節點數量] 中以j為頭結點左子樹節點數量為0,也需要dp[以j為頭結點左子樹節點數量] = 1, 否則乘法的結果就都變成0了。

所以初始化dp[0] = 1

4.確定遍歷順序

首先一定是遍歷節點數,從遞歸公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,節點數為i的狀態是依靠 i之前節點數的狀態。

那么遍歷i里面每一個數作為頭結點的狀態,用j來遍歷。

代碼如下:

  1. for (int i = 1; i <= n; i++) { 
  2.     for (int j = 1; j <= i; j++) { 
  3.         dp[i] += dp[j - 1] * dp[i - j]; 
  4.     } 

5.舉例推導dp數組

n為5時候的dp數組狀態如圖:

不同的二叉搜索樹3

當然如果自己畫圖舉例的話,基本舉例到n為3就可以了,n為4的時候,畫圖已經比較麻煩了。

我這里列到了n為5的情況,是為了方便大家 debug代碼的時候,把dp數組打出來,看看哪里有問題。

綜上分析完畢,C++代碼如下:

  1. class Solution { 
  2. public
  3.     int numTrees(int n) { 
  4.         vector<int> dp(n + 1); 
  5.         dp[0] = 1; 
  6.         for (int i = 1; i <= n; i++) { 
  7.             for (int j = 1; j <= i; j++) { 
  8.                 dp[i] += dp[j - 1] * dp[i - j]; 
  9.             } 
  10.         } 
  11.         return dp[n]; 
  12.     } 
  13. }; 
  • 時間復雜度:
  • 空間復雜度:

大家應該發現了,我們分析了這么多,最后代碼卻如此簡單!

總結

這道題目雖然在力扣上標記是中等難度,但可以算是困難了!

首先這道題想到用動規的方法來解決,就不太好想,需要舉例,畫圖,分析,才能找到遞推的關系。

然后難點就是確定遞推公式了,如果把遞推公式想清楚了,遍歷順序和初始化,就是自然而然的事情了。

可以看出我依然還是用動規五部曲來進行分析,會把題目的方方面面都覆蓋到!

而且具體這五部分析是我自己平時總結的經驗,找不出來第二個的,可能過一陣子 其他題解也會有動規五部曲了,哈哈。

當時我在用動規五部曲講解斐波那契的時候,一些錄友和我反應,感覺講復雜了。

其實當時我一直強調簡單題是用來練習方法論的,并不能因為簡單我就代碼一甩,簡單解釋一下就完事了。

可能當時一些同學不理解,現在大家應該感受方法論的重要性了,加油??

本文轉載自微信公眾號「代碼隨想錄」,可以通過以下二維碼關注。轉載本文請聯系代碼隨想錄公眾號。

 

責任編輯:武曉燕 來源: 代碼隨想錄
相關推薦

2021-08-31 11:35:24

二叉搜索樹迭代法公共祖先

2022-12-26 00:51:33

雙向鏈表二叉搜索樹

2021-09-02 11:31:28

二叉搜索樹迭代法公共祖先

2021-09-03 08:58:00

二叉搜索樹節點

2021-10-11 06:38:52

遞歸二叉搜索樹

2021-12-07 06:55:17

二叉搜索樹鏈表

2020-04-27 07:05:58

二叉樹左子樹右子樹

2024-01-17 07:36:50

二叉搜索聯系簿

2021-08-26 11:31:11

二叉樹數據結構算法

2023-07-31 08:01:13

二叉搜索測試

2021-04-28 20:12:27

數據結構創建

2021-03-22 08:23:29

LeetCode二叉樹節點

2023-02-13 08:02:08

哈希函數哈希表搜索樹

2021-09-07 11:01:41

二叉搜索樹序數組

2020-12-11 09:49:29

二叉樹搜索樹數據

2021-04-06 08:20:24

二叉搜索樹數據結構算法

2021-09-06 10:38:50

二叉搜索樹遞歸

2020-10-11 16:56:48

二叉搜索樹代碼開發

2021-04-20 08:37:14

數據結構二叉樹

2021-04-19 07:47:42

數據結構二叉樹Tree
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩精品一区二区免费 | 久久uomeier| av影院在线| 老牛国产精品一区的观看方式| 婷婷亚洲久悠悠色悠在线播放| 欧美日韩免费网站| 成人国产在线视频| 97香蕉超级碰碰久久免费软件 | 婷婷激情一区| 国产成人h网站| 精品久久久久久国产91| 超碰97在线资源| 国产精品久久久毛片| **爰片久久毛片| 亚洲第一狼人社区| 色偷偷88888欧美精品久久久| 成人综合网址| 在线成人h网| 欧美伊人久久大香线蕉综合69| 欧美吻胸吃奶大尺度电影| 你懂的在线网址| 亚洲视频在线看| 91社在线播放| 一区二区在线影院| 欧美日本亚洲视频| 538在线精品| 欧美专区亚洲专区| 看黄的a网站| 国产色婷婷亚洲99精品小说| 亚洲视频在线观看日本a| 91不卡在线观看| 日韩女在线观看| 成人看片爽爽爽| 久久久精品一区二区| 日本免费久久| 亚洲精品国产精品国产自| 男人的天堂在线视频免费观看 | 青青草99啪国产免费| 国产一区一一区高清不卡| 欧美一区二区三区系列电影| 日本一卡二卡四卡精品| 一区二区成人在线| 国产精品㊣新片速递bt| 亚洲18女电影在线观看| 最新91在线| 天天做天天摸天天爽国产一区| 偷偷要 色偷偷| 亚洲国产日韩在线一区模特| 在线观看入口黄最新永久免费国产| 亚洲一区二区三区免费视频| 在线久久视频| 色综合久久综合网欧美综合网| 最新国产在线视频| 色婷婷国产精品| 东凛在线观看| 日韩欧美色综合网站| 免费网站在线观看人| 精品国产污污免费网站入口 | 久久久久国内| 日韩电影免费观看在| 日韩主播视频在线| 亚洲精品二区| 成人av电影在线| 欧美私人情侣网站| 亚洲免费在线看| 亚洲日本高清| 欧美一区二区久久| 国产无遮挡裸体视频在线观看| 在线观看中文字幕亚洲| 99热这里只有精品首页| 国产欧美欧洲在线观看| 欧美韩国一区| 中文字幕99| 久久精品人人做人人爽人人| 成视人a免费观看视频| 欧美性猛交xxxx黑人猛交| а天堂中文在线官网| 亚洲性生活视频在线观看| 91成人福利| 91中文字精品一区二区| 免费成人美女在线观看.| 丰满爆乳一区二区三区| 亚洲电影在线播放| 污的网站在线观看| 日韩亚洲第一页| 欧洲乱码伦视频免费| 久久久久久艹| 91亚洲资源网| 一级片免费在线观看| 精品国产电影一区二区| 中文字幕日韩高清在线| 超碰在线97av| av电影天堂一区二区在线观看| av在线www| 精品偷拍各种wc美女嘘嘘| 蜜臀91精品国产高清在线观看| 久久亚洲一区二区| 国产亚洲精品久| 色三级在线观看| 久久久精品免费视频| 欧美激情第8页| 欧美精品一区免费| 91传媒视频在线播放| 91精品亚洲一区在线观看| 91中文字精品一区二区| 久久久久久久久伊人| 日本美女高清在线观看免费| 久久视频中文字幕| 亚洲黄色免费| 一级在线免费视频| 精品国产成人在线影院| 日韩国产专区| 国产精品久久..4399| 91福利在线免费观看| 日韩中文在线| 亚洲国产一区在线| 精品久久久久久久久久| 国产69精品久久| 高清国产在线一区| 国产精品伦一区| 日韩a**中文字幕| 国产91aaa| 亚洲欧美激情插 | 成人在线精品视频| 91色九色蝌蚪| 视频在线这里都是精品| 国产成人精品视频在线观看| 国产成人精品在线看| 黄色网页在线播放| 国产精品视频专区| 久久毛片高清国产| 正在播放日韩精品| 精品久久久久久亚洲| 亚洲国产精品久久人人爱蜜臀 | 色女人在线视频| 国产综合香蕉五月婷在线| 久久一区二区三区四区| 黑人另类精品××××性爽| 成人欧美一区二区三区黑人孕妇| 久久婷婷成人综合色| 欧美极品videos大乳护士| 国产精品视频入口| 午夜精品久久久久影视| 国产精品毛片久久久| 毛片在线视频播放| 亚洲欧美精品一区| 日韩精彩视频在线观看| 日本视频不卡| 91精品国产99久久久久久红楼| 一区二区不卡在线播放| 9国产精品午夜| 国内外免费激情视频| 精品国产欧美成人夜夜嗨| 国产一区不卡视频| 手机在线观看av| 色呦呦网站入口| 日韩精品在线影院| 韩日精品视频一区| 2021中文字幕在线| 亚洲一二三区精品| 日韩久久精品电影| 国产99久久久国产精品免费看| 亚洲精品mv| 乱熟女高潮一区二区在线| 亚洲精品资源美女情侣酒店 | 亚洲欧美偷拍自拍| 网址你懂得在线观看| 国产精品美女www爽爽爽视频| 亚洲在线观看免费| 精品不卡一区| 在线观看av中文| 国产精品久久久久久久久婷婷| 欧洲生活片亚洲生活在线观看| 午夜久久影院| av毛片在线看| 公共露出暴露狂另类av| 国产午夜精品免费一区二区三区| 国产精品自在欧美一区| 麻豆精品蜜桃| 一区二区三区视频网| 国产成+人+综合+亚洲欧洲| 亚洲国产一区二区三区| 亚洲精品国产首次亮相| 国产最新视频在线观看| 久久精品国产第一区二区三区最新章节 | 免费观看视频www| 97视频在线观看播放| 亚洲一区二区不卡免费| 亚洲色图国产| sm在线观看| 丝袜老师办公室里做好紧好爽| 久久久久久亚洲| 疯狂做受xxxx高潮欧美日本| 国产欧美精品| 精品无人乱码一区二区三区| 日本成人黄色网址| 国产精品一区二区三区观看| 日韩国产欧美区| 亚洲日穴在线视频| 激情久久久久久|