labuladong的算法小抄之js實現-第0章-學習算法和刷題的框架思維

文章直達地址: https://labuladong.gitbook.io/algo/di-ling-zhang-bi-du-xi-lie/xue-xi-shu-ju-jie-gou-he-suan-fa-de-gao-xiao-fang-fa

本系列為labuladong的算法小抄的javascript實現版本,實現原理參考labuladong的算法小抄欠雌。
本文為第0章第1小節(jié)《學習算法和刷題的框架思維》所涉及的代碼,直接上代碼

//二叉樹
/**
 * Definition for a binary tree node.
 **/
function TreeNode(val, left, right) {
  this.val = val === undefined ? 0 : val;
  this.left = left === undefined ? null : left;
  this.right = right === undefined ? null : right;
}

// N叉數
// class TreeNode {
//   constructor(val, children) {
//     this.val = val;
//     this.children = children;
//   }
// }

// 二叉樹遍歷
// function traverse(root) {
//   //   console.log(root.val); // 前序
//   if (root.left) traverse(root.left);
//   console.log(root.val); // 中序

//   if (root.right) traverse(root.right);
//   //   console.log(root.num); // 后序
// }

// function traverse(root) {
//   console.log(root.val);
//   if (root.children == null || root.children.length == 0) return;
//   for (let i = 0; i < root.children.length; i++) {
//     traverse(root.children[i]);
//   }
// }

// let left = new TreeNode(2);
// let right = new TreeNode(3);
// let root = new TreeNode(1, left, right);
// traverse(root);

// let child1 = new TreeNode(2, null);
// let child2 = new TreeNode(3, null);
// let root = new TreeNode(1, [child1, child2]);
// traverse(root);

// 求二叉樹中最大路徑和

/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxPathSum = function (root) {
  let ans = -Infinity;
  var oneSideMax = function (root) {
    if (root === null) return 0;
    let left = Math.max(0, oneSideMax(root.left));
    let right = Math.max(0, oneSideMax(root.right));
    ans = Math.max(ans, left + right + root.val);
    return Math.max(left, right) + root.val;
  };
  oneSideMax(root);
  return ans;
};

// 根據前序遍歷和中序遍歷的結果還原一棵二叉樹
var buildTree = function (preorder, inorder) {
  return recover(
    preorder,
    0,
    preorder.length - 1,
    inorder,
    0,
    inorder.length - 1
  );
};

var recover = function (preArray, preStart, preEnd, inArray, inStart, inEnd) {
  if (preStart > preEnd || inStart > inEnd) return null;
  let root = new TreeNode(preArray[preStart]);
  let inRoot = inArray.indexOf(root.val);
  let leftNum = inRoot - inStart;
  root.left = recover(
    preArray,
    preStart + 1,
    preStart + leftNum,
    inArray,
    inStart,
    inRoot - 1
  );
  root.right = recover(
    preArray,
    preStart + leftNum + 1,
    preEnd,
    inArray,
    inRoot + 1,
    inEnd
  );
  return root;
};

//恢復二叉搜索樹

/**
 * @param {TreeNode} root
 * @return {void} Do not return anything, modify root in-place instead.
 */

var recoverTree = function (root) {
  let prev = null;
  let first = null;
  let second = null;
  const traverse = function (root) {
    if (!root) return;
    traverse(root.left);

    if (prev && root.val < prev.val) {
      second = second == null ? prev : second;
      first = root;
    }
    prev = root;
    traverse(root.right);
  };
  traverse(root);
  let temp = first.val;
  first.val = second.val;
  second.val = temp;
};
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末聂抢,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子蘸吓,更是在濱河造成了極大的恐慌碧浊,老刑警劉巖赶么,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦胞,死亡現場離奇詭異替久,居然都是意外死亡,警方通過查閱死者的電腦和手機医瘫,發(fā)現死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門侣肄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旧困,“玉大人醇份,你說我怎么就攤上這事『鹁撸” “怎么了僚纷?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拗盒。 經常有香客問我怖竭,道長,這世上最難降的妖魔是什么陡蝇? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任痊臭,我火速辦了婚禮,結果婚禮上登夫,老公的妹妹穿的比我還像新娘广匙。我一直安慰自己,他們只是感情好恼策,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布鸦致。 她就那樣靜靜地躺著,像睡著了一般涣楷。 火紅的嫁衣襯著肌膚如雪分唾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天狮斗,我揣著相機與錄音绽乔,去河邊找鬼。 笑死碳褒,一個胖子當著我的面吹牛折砸,可吹牛的內容都是我干的。 我是一名探鬼主播骤视,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼鞍爱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了专酗?” 一聲冷哼從身側響起睹逃,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沉填,有當地人在樹林里發(fā)現了一具尸體疗隶,經...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年翼闹,在試婚紗的時候發(fā)現自己被綠了斑鼻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡猎荠,死狀恐怖坚弱,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情关摇,我是刑警寧澤荒叶,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站输虱,受9級特大地震影響些楣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜宪睹,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一愁茁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亭病,春花似錦鹅很、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胸蛛,卻和暖如春污茵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葬项。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工泞当, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人民珍。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓襟士,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嚷量。 傳聞我的和親對象是個殘疾皇子陋桂,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容