刷題第九天
513.?找樹左下角的值:
這題困擾我許久,我看到題解是兩種方式,一種是bfs,右子節(jié)點(diǎn)先進(jìn)隊(duì)列,左再進(jìn)隊(duì)列,這樣遍歷到最后的那一個節(jié)點(diǎn)就是最底層的最左節(jié)點(diǎn)。
另外一種是遞歸,設(shè)置兩個全局變量,一個val,一個deep,遞歸函數(shù)需要參數(shù)root,當(dāng)前深度。如果深度大于deep,就更新val。遞歸要先遞歸左子樹,再遞歸右子樹。
之所以困擾我許久是因?yàn)?,我一直在想,如果最底層只有一個右節(jié)點(diǎn)怎么辦,

599.?兩個列表的最小索引總和:
用哈希表,map<string,int> maps,string存數(shù)組元素,int存下標(biāo),設(shè)置sum標(biāo)記當(dāng)前的索引和。先遍歷一遍list1,存在maps中。遍歷list2,如果list2的元素在maps中存在,則判斷sum的是否大于當(dāng)前索引和,大于則將結(jié)果集清空,把該元素存進(jìn)結(jié)果集,更新sum為當(dāng)前索引和,如果sum等于當(dāng)前索引和,則把該元素存進(jìn)結(jié)果集。

559.?N 叉樹的最大深度:
這題和? 104.二叉樹的最大深度? 是一個思路。

617. 合并二叉樹:
用bfs。

654. 最大二叉樹:
用遞歸,終止條件為nums長度0,返回null。用max_element函數(shù)獲取最大值迭代器,此為當(dāng)前的根節(jié)點(diǎn),最大值的左邊進(jìn)入遞歸,返回值為root的左子樹。右同。

144. 二叉樹的前序遍歷:
用棧迭代或遞歸。

94.?二叉樹的中序遍歷:
用棧迭代或遞歸。

105. 從前序與中序遍歷序列構(gòu)造二叉樹:
用遞歸。如果前序和中序數(shù)組長度為0,返回null,找到中序中與前序第一個元素相同的下標(biāo)i,此時,前序第一個元素為當(dāng)前的根,根的左子樹為前序的第二個元素開始到第i個,中序的i前面,依次遞歸。

106. 從中序與后序遍歷序列構(gòu)造二叉樹:
和105類似。

145. 二叉樹的后序遍歷:
遞歸or用棧。先左節(jié)點(diǎn)一直入棧,如果左節(jié)點(diǎn)為空,右節(jié)點(diǎn)入棧,直到null。棧頂出棧,val存入結(jié)果集,如果當(dāng)前棧頂?shù)淖蠊?jié)點(diǎn)是出棧的這個節(jié)點(diǎn),那么將root置為棧頂?shù)挠夜?jié)點(diǎn),否則root=null。