代碼隨想錄——第十七天

654.最大二叉樹

又是構(gòu)造二叉樹疯暑,昨天大家剛剛做完 中序后序確定二叉樹,今天做這個 應(yīng)該會容易一些高帖, 先看視頻缰儿,好好體會一下 為什么構(gòu)造二叉樹都是 前序遍歷

題目鏈接/文章講解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html?

視頻講解:https://www.bilibili.com/video/BV1MG411G7ox?

class Solution {

? ? public TreeNode constructMaximumBinaryTree(int[] nums) {

? ? ? ? if(nums.length == 0) return null;

? ? ? ? int max = -1, index = 0;

? ? ? ? for(int i = 0; i < nums.length; i ++){

? ? ? ? ? ? if(nums[i] > max){

? ? ? ? ? ? ? ? max = nums[i];

? ? ? ? ? ? ? ? index = i;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? TreeNode root = new TreeNode(max);

? ? ? ? if(nums.length == 1) return root;

? ? ? ? int[] left = sub(nums, 0, index);

? ? ? ? int[] right = sub(nums, index + 1, nums.length);

? ? ? ? root.left = constructMaximumBinaryTree(left);

? ? ? ? root.right = constructMaximumBinaryTree(right);

? ? ? ? return root;

? ? }

? ? public int[] sub(int[] array, int start, int end){

? ? ? ? int[] res = new int[end - start];

? ? ? ? int r = 0;

? ? ? ? for(int i = start; i < end; i ++){

? ? ? ? ? ? res[r ++] = array[i];

? ? ? ? }

? ? ? ? return res;

? ? }

}

617.合并二叉樹

這次是一起操作兩個二叉樹了, 估計(jì)大家也沒一起操作過兩個二叉樹散址,也不知道該如何一起操作乖阵,可以看視頻先理解一下。 優(yōu)先掌握遞歸预麸。

題目鏈接/文章講解:https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html?

視頻講解:https://www.bilibili.com/video/BV1m14y1Y7JK?

class Solution {

? ? public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {

? ? ? ? if(root1 == null) return root2;

? ? ? ? if(root2 == null) return root1;

? ? ? ? if(root1 == null && root2 == null) return null;

? ? ? ? TreeNode cur = new TreeNode(root1.val + root2.val);

? ? ? ? TreeNode left = mergeTrees(root1.left, root2.left);

? ? ? ? TreeNode right = mergeTrees(root1.right, root2.right);

? ? ? ? cur.left = left;

? ? ? ? cur.right = right;

? ? ? ? return cur;

? ? }

}

700.二叉搜索樹中的搜索

遞歸和迭代 都可以掌握以下瞪浸,因?yàn)楸绢}比較簡單, 了解一下 二叉搜索樹的特性

題目鏈接/文章講解: https://programmercarl.com/0700.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%90%9C%E7%B4%A2.html?

視頻講解:https://www.bilibili.com/video/BV1wG411g7sF?

class Solution {

? ? public TreeNode searchBST(TreeNode root, int val) {

? ? ? ? if(root == null) return null;

? ? ? ? if(root.val == val) return root;

? ? ? ? TreeNode left = searchBST(root.left, val);

? ? ? ? TreeNode right = searchBST(root.right, val);

? ? ? ? if(left != null) return left;

? ? ? ? if(right != null) return right;

? ? ? ? return null;

? ? }

}

class Solution {

? ? // 遞歸吏祸,普通二叉樹

? ? public TreeNode searchBST(TreeNode root, int val) {

? ? ? ? if (root == null || root.val == val) {

? ? ? ? ? ? return root;

? ? ? ? }

? ? ? ? TreeNode left = searchBST(root.left, val);

? ? ? ? if (left != null) {

? ? ? ? ? ? return left;

? ? ? ? }

? ? ? ? return searchBST(root.right, val);

? ? }

}

class Solution {

? ? // 遞歸对蒲,利用二叉搜索樹特點(diǎn),優(yōu)化

? ? public TreeNode searchBST(TreeNode root, int val) {

? ? ? ? if (root == null || root.val == val) {

? ? ? ? ? ? return root;

? ? ? ? }

? ? ? ? if (val < root.val) {

? ? ? ? ? ? return searchBST(root.left, val);

? ? ? ? } else {

? ? ? ? ? ? return searchBST(root.right, val);

? ? ? ? }

? ? }

}

class Solution {

? ? // 迭代贡翘,普通二叉樹

? ? public TreeNode searchBST(TreeNode root, int val) {

? ? ? ? if (root == null || root.val == val) {

? ? ? ? ? ? return root;

? ? ? ? }

? ? ? ? Stack<TreeNode> stack = new Stack<>();

? ? ? ? stack.push(root);

? ? ? ? while (!stack.isEmpty()) {

? ? ? ? ? ? TreeNode pop = stack.pop();

? ? ? ? ? ? if (pop.val == val) {

? ? ? ? ? ? ? ? return pop;

? ? ? ? ? ? }

? ? ? ? ? ? if (pop.right != null) {

? ? ? ? ? ? ? ? stack.push(pop.right);

? ? ? ? ? ? }

? ? ? ? ? ? if (pop.left != null) {

? ? ? ? ? ? ? ? stack.push(pop.left);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return null;

? ? }

}

class Solution {

? ? // 迭代蹈矮,利用二叉搜索樹特點(diǎn),優(yōu)化鸣驱,可以不需要棧

? ? public TreeNode searchBST(TreeNode root, int val) {

? ? ? ? while (root != null)

? ? ? ? ? ? if (val < root.val) root = root.left;

? ? ? ? ? ? else if (val > root.val) root = root.right;

? ? ? ? ? ? else return root;

? ? ? ? return null;

? ? }

}

98.驗(yàn)證二叉搜索樹

遇到 搜索樹泛鸟,一定想著中序遍歷批幌,這樣才能利用上特性缘挽。

但本題是有陷阱的,可以自己先做一做恬汁,然后在看題解闸翅,看看自己是不是掉陷阱里了再芋。這樣理解的更深刻。

題目鏈接/文章講解:https://programmercarl.com/0098.%E9%AA%8C%E8%AF%81%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html

視頻講解:https://www.bilibili.com/video/BV18P411n7Q4?


應(yīng)該確保左子樹的最大值小于根節(jié)點(diǎn)的值坚冀,且根節(jié)點(diǎn)的值小于右子樹的最小值济赎。

我的

class Solution {

? ? public boolean isValidBST(TreeNode root) {

? ? ? ? if(root == null) return true;

? ? ? ? if(root.left == null && root.right == null) return true;

? ? ? ? boolean left = isValidBST(root.left);

? ? ? ? boolean right = isValidBST(root.right);

? ? ? ? if(root.left == null) return root.val < root.right.val && right;

? ? ? ? if(root.right == null) return root.left.val < root.val && left;

? ? ? ? boolean mid = root.left.val < root.val && root.val < root.right.val;

? ? ? ? return left && mid && right;

? ? }

}

root?=

[5,4,6,null,null,3,7]

添加到測試用例

輸出

true

預(yù)期結(jié)果

false


classSolution{// 遞歸TreeNodemax;publicbooleanisValidBST(TreeNoderoot){if(root==null){returntrue;}// 左booleanleft=isValidBST(root.left);if(!left){returnfalse;}// 中if(max!=null&&root.val<=max.val){returnfalse;}max=root;// 右booleanright=isValidBST(root.right);returnright;}}classSolution{// 迭代publicbooleanisValidBST(TreeNoderoot){if(root==null){returntrue;}Stack<TreeNode>stack=newStack<>();TreeNodepre=null;while(root!=null||!stack.isEmpty()){while(root!=null){stack.push(root);root=root.left;// 左}// 中,處理TreeNodepop=stack.pop();if(pre!=null&&pop.val<=pre.val){returnfalse;}pre=pop;root=pop.right;// 右}returntrue;}}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市司训,隨后出現(xiàn)的幾起案子华蜒,更是在濱河造成了極大的恐慌,老刑警劉巖豁遭,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贺拣,居然都是意外死亡蓖谢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門譬涡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闪幽,“玉大人,你說我怎么就攤上這事涡匀《㈦纾” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵陨瘩,是天一觀的道長腕够。 經(jīng)常有香客問我,道長舌劳,這世上最難降的妖魔是什么帚湘? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮甚淡,結(jié)果婚禮上大诸,老公的妹妹穿的比我還像新娘。我一直安慰自己贯卦,他們只是感情好资柔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撵割,像睡著了一般贿堰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睁枕,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天官边,我揣著相機(jī)與錄音,去河邊找鬼外遇。 笑死注簿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跳仿。 我是一名探鬼主播诡渴,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妄辩?” 一聲冷哼從身側(cè)響起惑灵,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眼耀,沒想到半個月后英支,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哮伟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年干花,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楞黄。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡池凄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鬼廓,到底是詐尸還是另有隱情肿仑,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布碎税,位于F島的核電站尤慰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚣录。R本人自食惡果不足惜割择,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萎河。 院中可真熱鬧荔泳,春花似錦、人聲如沸虐杯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擎椰。三九已至支子,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間达舒,已是汗流浹背值朋。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巩搏,地道東北人昨登。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像贯底,于是被迫代替她去往敵國和親丰辣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容