精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起聊聊十五周算法—二叉搜索樹(BST)

開發(fā) 前端
BST有一個重要的性質(zhì):BST的中序遍歷結(jié)果是有序的(升序),也就是在中序位置可以將每個節(jié)點的值升序打印出來。

今天是十五周算法訓練營的第五周,主要講二叉搜索樹專題,包含:驗證二叉搜索樹、不同的二叉搜索樹、二叉樹的最近公共祖先、二叉搜索樹的最近公共祖先。(歡迎加入十五周算法訓練營,與小伙伴一起卷算法)

BST的特性:

對于BST的每一個節(jié)點node,左子樹節(jié)點的值都比node的值要小,右子樹節(jié)點的值都比node的值大;

對于BST的每一個節(jié)點node,它的左側(cè)子樹和右側(cè)子樹都是BST。

BST有一個重要的性質(zhì):BST的中序遍歷結(jié)果是有序的(升序),也就是在中序位置可以將每個節(jié)點的值升序打印出來

void traverse(TreeNode root) {
     if (root == null) return;
     traverse(root.left);
     // 中序遍歷代碼位置
     print(root.val);
     traverse(root.right);
}

驗證二叉搜索樹

給你一個二叉樹的根節(jié)點 root ,判斷其是否是一個有效的二叉搜索樹。

有效 二叉搜索樹定義如下:

節(jié)點的左子樹只包含 小于 當前節(jié)點的數(shù)。 節(jié)點的右子樹只包含 大于 當前節(jié)點的數(shù)。 所有左子樹和右子樹自身必須也是二叉搜索樹。

示例 1:

輸入:root = [2,1,3] 輸出:true

根據(jù)二叉搜索樹特性,通過中序遍歷獲取。

// 解題思路:
// 1. 是否可以通過遍歷一遍二叉樹得到答案?
// 通過中序遍歷可以得到,因為BST的中序遍歷是一個升序結(jié)果
function isValidBST1(root) {
    let inorder = -Infinity;
    let result = true;
    let traverse = root => {
        if (root === null) {
            return;
        }

        // 前序位置
        traverse(root.left);
        // 中序位置
        // 中序位置獲取當前值,并比較其和前一個值的大小,如果小于等于前一個值,則證明不是BST樹,則將結(jié)果變?yōu)閒alse
        if (root.val <= inorder) {
            result = false;
        } else {
            inorder = root.val;
        }
        traverse(root.right);
        // 后續(xù)位置
    };

    traverse(root);

    return result;
}

// 將中序遍歷變?yōu)檠h(huán)的方式
function isValidBST2(root) {
    if (root === null) {
        return true;
    }
    let head = root;
    const stack = [];
    let inorder = -Infinity;

    // 中序遍歷的循環(huán)結(jié)構(gòu)是需要創(chuàng)建一個棧,然后先將左節(jié)點全壓入棧中
    while (stack.length > 0 || head !== null) {
        // 當head不為空時,壓入棧中
        if (head !== null) {
            stack.push(head);
            head = head.left;
        } else {
            // 彈出棧頂元素
            head = stack.pop();
            if (inorder >= head.val) {
                return false;
            }
            inorder = head.val;
            head = head.right;
        }
    }

    return true;
}

// 2. 是否可以定義一個遞歸函數(shù),通過子問題(子樹)的答案推導出原問題的答案?
// 答案是可以的,因為搜索二叉樹的性質(zhì)是:
// (1)對于BST的每一個節(jié)點node,左子樹節(jié)點值都比node的值要小,右子樹節(jié)點的值逗比node的值大;
// (2)對于BST的每一個節(jié)點node,它的左側(cè)子樹和右側(cè)子樹都是BST
// 則我們解決該問題可定義一個遞歸函數(shù)來進行解決

// 注意:該問題需要借助外部變量,因為根節(jié)點的值必須大于左子樹所有值、小于右子樹所有值,所以需要引入最大最小值

function isValidBST3(root) {
    // 構(gòu)造一個輔助函數(shù),判斷根節(jié)點是否在(min,max)范圍內(nèi)
    const helper = (root, min, max) => {
        if (root === null) {
            return true;
        }

        if (root.val <= min) {
            return false;
        }

        if (root.val >= max) {
            return false;
        }

        return helper(root.left, min, root.val) && helper(root.right, root.val, max);
    };

    // 初始狀態(tài)min為-Infinity,max為Infinity
    return helper(root, -Infinity, Infinity);
}

不同的二叉搜索樹

給你一個整數(shù) n ,求恰由 n 個節(jié)點組成且節(jié)點值從 1 到 n 互不相同的 「二叉搜索樹」 有多少種?返回滿足題意的二叉搜索樹的種數(shù)。

示例 1:」

圖片

輸入:n = 3

輸出:5

利用的也是左子樹值 < 根節(jié)點 < 右子樹值

// 對于BST的每一個節(jié)點node,左子樹節(jié)點的值都比node的值要小,右子樹節(jié)點的值都比node的值大

// 在該問題中,1~n都有可能成為根節(jié)點,然后左邊的是左子樹上的點,右邊的是右子樹上的點,然后對應(yīng)根節(jié)點的搜索樹數(shù)量就是左子樹的組合數(shù) * 右子樹的組合數(shù);

// 該問題明顯就轉(zhuǎn)換為一個遞歸問題

function numTree(n) {
    // 為了解決子問題的重復問題,需要引入備忘錄
    const memo = [];
    for (let i = 0; i < n + 1; i++) {
        memo.push([]);
        for (let j = 0; j < n + 1; j++) {
            memo[i].push(0);
        }
    }
    const count = (low, high) => {
        // 遞歸終止條件
        if (low > high) {
            return 1;
        }

        // 判斷備忘錄中是否存在該值,存在的話直接使用
        if (memo[low][high] > 0) {
            return memo[low][high];
        }
        let result = 0;

        for (let i = low; i <= high; i++) {
            const left = count(low, i - 1);
            const right = count(i + 1, high);

            result += left * right;
        }

        // 將結(jié)果存儲到備忘錄中
        memo[low][high] = result;

        return result;
    };

    return count(1, n);
}

console.log(numTree(3));

二叉樹的最近公共祖先

給定一個二叉樹, 找到該樹中兩個指定節(jié)點的最近公共祖先。

百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節(jié)點 p、q,最近公共祖先表示為一個節(jié)點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節(jié)點也可以是它自己的祖先)。”

示例 1:

圖片

輸入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 輸出:3 解釋:節(jié)點 5 和節(jié)點 1 的最近公共祖先是節(jié)點 3 。

// 通過遞歸解決(后續(xù)遍歷)
function lowestCommonAncestor(root, p, q) {
    // 確定遞歸函數(shù)
    const traverse = (node, p, q) => {
        // 確定遞歸終止條件
        if (node === null || node === p || node === q) {
            return node;
        }

        const left = traverse(node.left, p, q);
        const right = traverse(node.right, p, q);

        // 后續(xù)位置
        // 找到一個節(jié)點,其發(fā)現(xiàn)p、q節(jié)點分別出現(xiàn)在其左右子樹上
        if (left !== null && right !== null) {
            return node;
        }

        // p或q本身就是最近公共祖先
        if (left === null) {
            return right;
        }

        return left;
    };

    return traverse(root, p, q);
}

二叉搜索樹的最近公共祖先

給定一個二叉搜索樹, 找到該樹中兩個指定節(jié)點的最近公共祖先。

百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結(jié)點 p、q,最近公共祖先表示為一個結(jié)點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節(jié)點也可以是它自己的祖先)。”

例如,給定如下二叉搜索樹:  root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1:

圖片

輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 輸出: 6 解釋: 節(jié)點 2 和節(jié)點 8 的最近公共祖先是 6。

// 因為是二叉搜索樹,其是有順序的,所以找最近公共祖先節(jié)點的問題就轉(zhuǎn)換成了該節(jié)點在[p, q]中間即可
function lowestCommonAncestor(root, p, q) {
    const helper = (node, p, q) => {
        if (node === null) {
            return node;
        }

        if (node.val > p.val && node.val > q.val) {
            const left = helper(node.left, p, q);

            if (left !== null) {
                return left;
            }
        }

        if (node.val < p.val && node.val < q.val) {
            const right = helper(node.right, p, q);
            if (right !== null) {
                return right;
            }
        }

        return node;
    };

    return helper(root, p, q);
}

責任編輯:武曉燕 來源: 前端點線面
相關(guān)推薦

2023-05-08 07:32:03

BFSDFS路徑

2023-02-01 07:27:46

序列化二叉樹根節(jié)點

2023-06-19 07:31:34

普通動態(tài)規(guī)劃字符串

2021-09-02 11:31:28

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

2021-08-26 11:31:11

二叉樹數(shù)據(jù)結(jié)構(gòu)算法

2022-08-30 13:48:16

LinuxMySQL內(nèi)存

2023-10-10 08:00:07

2024-02-20 21:34:16

循環(huán)GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-06-30 08:18:51

敏捷開發(fā)模式

2022-05-24 08:21:16

數(shù)據(jù)安全API

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-09-10 21:42:31

2023-07-27 07:46:51

SAFe團隊測試

2022-06-26 09:40:55

Django框架服務(wù)

2023-12-28 09:55:08

隊列數(shù)據(jù)結(jié)構(gòu)存儲

2022-10-28 07:27:17

Netty異步Future

2022-11-12 12:33:38

CSS預處理器Sass

2022-02-14 07:03:31

網(wǎng)站安全MFA
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲在线免费| 国内毛片久久| 亚洲狠狠丁香婷婷综合久久久| 亚洲自拍偷拍网址| 日日夜夜综合网| 色综合狠狠操| 精品成人一区二区三区| 五月天婷婷激情视频| 中国av在线播放| 26uuu久久天堂性欧美| 国产欧美日韩中文字幕| 日韩免费不卡视频| 99精品美女| 亚洲精品ady| 婷婷激情5月天| 国产自产自拍视频在线观看| 国产精品久久久久永久免费观看| 风间由美久久久| 亚洲视频一区在线播放| 夜夜爽av福利精品导航| 久久精品一本久久99精品| 中文字幕 日本| 精品国产一区二区三区2021| 色噜噜狠狠成人网p站| 日本黄色片一级片| 国产激情小视频在线| 久久久久久久久久久久久久久99| 5566av亚洲| 中文字幕在线观看高清| 香蕉久久久久久久av网站| 欧美精品生活片| 九一在线免费观看| 国产永久精品大片wwwapp| 欧美mv和日韩mv国产网站| 亚洲另类第一页| 亚洲播播91| 精品美女永久免费视频| 少妇一晚三次一区二区三区| 日本电影全部在线观看网站视频| 久久久精品黄色| 鲁鲁狠狠狠7777一区二区| 亚洲欧美激情在线观看| 精品一区二区三区免费观看| 国产精品av电影| 中文字幕精品无码一区二区| 亚洲精品日本| 97在线视频免费| 精品深夜av无码一区二区老年| 天天综合网91| 日韩最新在线视频| 激情高潮到大叫狂喷水| 欧美顶级大胆免费视频| 日日噜噜噜夜夜爽亚洲精品 | 黄色一级视频免费看| 亚洲精品欧美| 91高清免费在线观看| 中文字幕在线观看免费视频| 亚洲黄色三级| 国内精品久久久久影院 日本资源| 久久久久亚洲av无码专区体验| 欧美hd在线| www国产亚洲精品久久网站| 操她视频在线观看| 国产精品x453.com| 久久久av一区| 欧美激情精品久久| 亚洲黄网站黄| 欧美亚洲伦理www| 久久久久久亚洲av无码专区| 免费精品视频在线| 成人黄色免费看| a天堂视频在线| 成人深夜视频在线观看| 精品乱子伦一区二区三区| 深夜福利在线看| 久久久久青草大香线综合精品| 日本一区二区久久精品| 91大神在线网站| 亚洲精品视频在线观看免费| 97视频在线免费| 英国三级经典在线观看| 在线观看亚洲a| 日韩av片免费观看| 粉嫩久久久久久久极品| 亚洲视频综合网| 国产日产精品一区二区三区的介绍| 羞羞答答成人影院www| 欧美极品美女电影一区| 六月丁香婷婷综合| 激情综合色综合久久| 国产精品香蕉视屏| 91社区在线高清| 一区二区三区日韩欧美| 99免费视频观看| 国产精品亚洲一区二区在线观看| 精品乱人伦一区二区三区| 欧美做受喷浆在线观看| 99国产精品免费视频观看| 久久理论片午夜琪琪电影网| 亚洲第一区av| av午夜一区麻豆| 五月天国产一区| 国产天堂在线播放视频| 欧亚一区二区三区| wwwxx日本| 手机在线电影一区| 欧美中文字幕在线| 国产成人精品白浆久久69| 久久嫩草精品久久久精品| 欧美 亚洲 视频| 久久久久黄色| 国产视频精品一区二区三区| 卡通动漫亚洲综合| 久久午夜av| 国产精品一区二区三区在线 | 7777kkkk成人观看| 国产人妖一区二区| 国产日韩欧美精品电影三级在线 | 高潮在线视频| 欧美一卡二卡三卡| 能直接看的av| 欧美一级久久| 国产一级精品aaaaa看| 国产在线更新| 欧美精品少妇一区二区三区| 国产精品jizz| 一区二区三区高清视频在线观看| 亚洲xxxxx| 在线免费av网站| 一本大道av伊人久久综合| 中国极品少妇xxxx| 欧美精品99| 亚洲一区二区三区乱码aⅴ蜜桃女| 黄色av免费在线观看| 欧美日韩中文字幕在线| 国产真实乱人偷精品| 欧美日韩亚洲一区三区 | 极品尤物一区| 欧美激情欧美激情| 国产aⅴ爽av久久久久成人| 亚洲欧美自拍偷拍色图| 欧美成年人视频在线观看| 国产亚洲一卡2卡3卡4卡新区| 97在线视频国产| 无码国产精品96久久久久| 亚洲一区二区三区小说| 久久发布国产伦子伦精品| 91精品国产91久久久久久黑人| 国产日韩欧美在线观看| 无遮挡的视频在线观看 | 亚洲成在人线免费| 日韩女优在线视频| 亚洲国产精品第一区二区三区| yy111111少妇影院日韩夜片 | 夜夜精品视频一区二区| 中国老熟女重囗味hdxx| 国产精品theporn| 国产精品久久7| aa视频在线观看| 日韩电影中文字幕一区| 久操视频在线免费观看| 欧美国产激情二区三区| 99国产精品久久久久久| 一区二区电影在线观看| 福利视频久久| 日韩大尺度黄色| 中文字幕亚洲一区二区三区五十路| 中文字幕av无码一区二区三区| 成人免费在线播放视频| 成人一区二区三区仙踪林| 尤物在线精品| 欧美一区二区三区精美影视| 免费在线成人激情电影| 日韩一区二区久久久| 亚洲免费国产视频| 欧美日韩中文字幕在线| 日本成人精品视频| 粉嫩绯色av一区二区在线观看| av之家在线观看| 精品一区不卡| 91亚色免费| 欧美香蕉视频| 欧美久久精品一级黑人c片| 亚洲毛片在线播放| 欧洲人成人精品| 国产又黄又爽又无遮挡| 91视频免费播放| 午夜视频在线网站| 99国产精品久久久久久久| 视频在线99re| 91精品国产自产在线丝袜啪| 日本久久中文字幕| av官网在线播放| 亚洲男人的天堂在线播放| 亚洲一区二区三区高清视频| 亚洲国产日产av| 国产精品国产三级国产专业不| 国产一区二区影院| 大肉大捧一进一出好爽动态图| 91九色精品| 久久久影院一区二区三区 | 91精品黄色片免费大全| 丰满少妇xoxoxo视频| 一区二区三区免费网站| 免费看黄色av| 91亚洲精华国产精华精华液| 亚洲午夜精品一区| 噜噜噜91成人网| 免费特级黄色片| 欧美激情电影| 欧美日韩亚洲免费| 一区二区三区自拍视频| 成人国产在线激情| 日本欧美韩国| 欧美一级高清免费播放| 久久99亚洲网美利坚合众国| 色阁综合伊人av| 国产中文在线观看| 日韩精品极品在线观看| 亚洲精品成av人片天堂无码| 欧美日韩成人高清| 一级黄色在线观看| 欧美性极品xxxx做受| 国产精品99精品无码视| 亚洲精品视频一区二区| 亚洲 欧美 国产 另类| 久久久久久久久一| 欧美成人三级伦在线观看| 高清久久久久久| 伊人免费视频二| 国内精品伊人久久久久av一坑| 91蝌蚪视频在线观看| 国产模特精品视频久久久久| 欧美精品自拍视频| 亚洲大片av| 日本中文字幕在线视频观看| 欧美va亚洲va日韩∨a综合色| 中文字幕乱码一区二区三区| sdde在线播放一区二区| 日韩欧美手机在线| 精品国产一区二区三区| 欧美午夜视频在线| 九九视频免费观看视频精品 | 在线看片不卡| 穿情趣内衣被c到高潮视频| 亚洲久久久久| 玖玖精品在线视频| 激情91久久| 黄色一级在线视频| 国产日韩欧美一区二区三区在线观看| 国产乱子伦精品无码专区| 欧美三级黄美女| 波多野结衣av一区二区全免费观看| 欧美久久视频| 成人免费性视频| 国产精品美女久久久浪潮软件| 国产黄页在线观看| 久久久久免费| 91福利国产成人精品播放| 麻豆成人综合网| 国产大片一区二区三区| 国产91在线看| 91av在线免费| 日本一区二区成人| 色婷婷在线视频观看| 亚洲国产精品综合小说图片区| 日本特黄特色aaa大片免费| 精品久久香蕉国产线看观看亚洲| 波多野结衣国产| 欧美视频一区二| 国产偷拍一区二区| 亚洲国产99精品国自产| 国产在线视频你懂得| 精品国产一区二区三区四区在线观看 | 中文一区二区完整视频在线观看 | 青青免费在线视频| 亚洲午夜未满十八勿入免费观看全集| 成人福利在线| 欧美成人精品一区| 亚洲优女在线| 91免费看片网站| 欧美爱爱网站| 国产精品美女在线播放| 亚洲电影成人| 欧美日韩一区二区三区69堂| 国产成人免费xxxxxxxx| 国产精品揄拍100视频| 国产精品国产三级国产普通话三级| 欧美第一页在线观看| 狠狠久久五月精品中文字幕| 国产又黄又大又爽| 日韩电影中文字幕| 国产福利视频在线| 欧美孕妇性xx| 欧美日韩黄色| 三区精品视频| 亚洲午夜极品| www.精品在线| 91色porny蝌蚪| 欧美日韩成人免费观看| 日本精品视频一区二区| 成人午夜视频一区二区播放| 中文字幕亚洲综合久久| a国产在线视频| 成人夜晚看av| 欧美手机视频| 精品国产免费av| 国产69精品一区二区亚洲孕妇| 日本精品在线观看视频| 亚洲最色的网站| 亚洲熟妇无码久久精品| 亚洲精品网址在线观看| 中文字幕中文字幕在线十八区 | 亚洲天堂第一区| 国产色综合网| 国产麻豆剧传媒精品国产| 欧美高清在线一区二区| 国产精品视频一区在线观看| 欧美va亚洲va国产综合| 91大神在线网站| 精品视频一区在线视频| 成人动漫在线免费观看| 欧美孕妇性xx| 日韩美女毛片| 精品国产一区三区| 丁香婷婷综合激情五月色| 成人免费视频国产免费观看| 国产福利91精品| 日本一二三区在线观看| 欧美日韩国产电影| 午夜免费福利在线观看| 国产精品九九九| 精品日韩毛片| 熟妇人妻无乱码中文字幕真矢织江| 97se亚洲国产综合在线| 制服丝袜中文字幕第一页 | 九九热精品视频国产| 天堂成人在线观看| 欧美激情视频一区二区三区不卡 | av福利在线导航| **欧美日韩vr在线| 日本欧美三级| 国产精品国模大尺度私拍| 国产高清欧美| 国产在线精品日韩| 亚洲视频高清| 久久久久成人精品无码中文字幕| 久久精品国产精品青草| 欧美做受xxxxxⅹ性视频| 国产二区国产一区在线观看| 成人欧美一区二区三区黑人一 | 日本三级一区| 国产精品一页| 1769国产精品| av一本在线| 成人欧美一区二区三区视频网页| 37p粉嫩大胆色噜噜噜| 国产精品草草| 久久久99精品视频| 日韩免费大片| 国产aⅴ精品一区二区三区黄| 国内精品久久久久久久影视麻豆 | 国产日韩三级在线| 最近中文字幕在线观看| 日韩中文视频免费在线观看| 二区三区精品| 加勒比成人在线| 久久久99久久精品欧美| 一级日韩一级欧美| 欧美成人亚洲成人| 精品丝袜久久| 天天爽人人爽夜夜爽| 中文字幕一区二区三| 国产成人a人亚洲精品无码| 91精品91久久久久久| 精品久久美女| 日本一级大毛片a一| 精品久久久久久久久久久久久 | www五月婷婷| 欧美做受高潮1| 国产精品久久久久久久| 中文字幕视频观看| 色综合久久久久综合99| 国产精品一区二区三区视频网站| 国产91视觉| 美女一区二区久久| 国产精品第56页| 中文在线不卡视频| 第一区第二区在线| 小泽玛利亚视频在线观看| 亚洲国产毛片aaaaa无费看| 精品亚洲综合| 99在线观看| 免费在线一区观看| 黄色一级视频在线观看| 亚洲社区在线观看| 国产一区丝袜| 中文字幕日韩久久| 在线观看av不卡| 成人bbav|