国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

專題二:二叉樹的深搜【遞歸、搜索、回溯】

這篇具有很好參考價值的文章主要介紹了專題二:二叉樹的深搜【遞歸、搜索、回溯】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

深度優(yōu)先遍歷(DFS,全稱為DepthFirstTraversal),是我們樹或者圖這樣的數(shù)據(jù)結(jié)構(gòu)中常用的?種遍歷算法。這個算法會盡可能深的搜索樹或者圖的分?,直到?條路徑上的所有節(jié)點都被遍歷完畢,然后再回溯到上?層,繼續(xù)找?條路遍歷。
在?叉樹中,常?的深度優(yōu)先遍歷為:前序遍歷、中序遍歷以及后序遍歷。
?三種遍歷方式的最大區(qū)別是:處理根節(jié)點的時機不同。?

1、計算布爾二叉樹的值

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

//后序遍歷
class Solution {
public:
    bool evaluateTree(TreeNode* root) {
        if(root->left == nullptr) return root->val;
        bool l = evaluateTree(root->left);
        bool r = evaluateTree(root->right);
        if(root->val == 2) return l | r;
        else return l & r;
    }
};

2、求根節(jié)點到葉節(jié)點數(shù)字之和?

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

class Solution {
public:
    int dfs(TreeNode* root,int presum)
    {
        presum = presum*10+root->val;

        if(root->left == nullptr && root->right == nullptr) return presum;
        int ret = 0;

        if(root->left) ret += dfs(root->left,presum);
        if(root->right) ret += dfs(root->right,presum);
        return ret;
    }
    int sumNumbers(TreeNode* root) {
        return dfs(root,0);
    }
};

3、二叉樹剪枝

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

?????????

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(root==nullptr) return nullptr;

        root->left = pruneTree(root->left);
        root->right = pruneTree(root->right);

        if(root->left == nullptr && root->right == nullptr && root->val == 0)
        {
            delete root;
            root = nullptr;
        }

        return root;
    }
};

4、驗證二叉搜索樹

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    long prev = LONG_MIN;

    bool isValidBST(TreeNode* root) {
        if(root == nullptr) return true;

        bool left = isValidBST(root->left);
        if(left == false) return false;
        bool cur = false;
        if(root->val > prev)
        {
            cur = true;
        }
        if(cur == false) return false;
        prev = root->val;

        bool right = isValidBST(root->right);
        
        return left && right && cur;
    }
};

?5、二叉搜索樹中第K小的元素

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int count;
    int ret;
    int kthSmallest(TreeNode* root, int k) {
        count = k;
        dfs(root);
        return ret;
    }
    void dfs(TreeNode* root)
    {
        if(root == nullptr || count == 0)
            return;
        dfs(root->left);
        count--;
        if(count == 0) ret = root->val;
        dfs(root->right);
    }
};

6、二叉樹的所有路徑

專題二:二叉樹的深搜【遞歸、搜索、回溯】,遞歸搜索回溯,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-726793.html

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<string> ret;

    vector<string> binaryTreePaths(TreeNode* root) {
        string path;
        dfs(root,path);
        return ret;
    }
    void dfs(TreeNode* root,string path)
    {
        path += to_string(root->val);
        if(root->left == nullptr && root->right == nullptr) 
        {
            ret.push_back(path);
            return;
        } 
        path += "->";
        if(root->left) dfs(root->left,path);
        if(root->right) dfs(root->right,path);
    }
};

到了這里,關(guān)于專題二:二叉樹的深搜【遞歸、搜索、回溯】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 遞歸、搜索與回溯算法(專題一:遞歸)

    遞歸、搜索與回溯算法(專題一:遞歸)

    往期文章(希望小伙伴們在看這篇文章之前,看一下往期文章) (1)遞歸、搜索與回溯算法(專題零:解釋回溯算法中涉及到的名詞)【回溯算法入門必看】-CSDN博客 接下來我會用幾道題,來讓同學(xué)們利用我在專題零中提到的 遞歸的宏觀思想 來解決這些題目。 目錄 1. 漢諾

    2024年01月25日
    瀏覽(24)
  • 遞歸、搜索與回溯算法(專題六:記憶化搜索)

    遞歸、搜索與回溯算法(專題六:記憶化搜索)

    目錄 1. 什么是記憶化搜索(例子:斐波那契數(shù)) 1.1 解法一:遞歸 1.2 解法二:記憶化搜索 1.2.1 記憶化搜索比遞歸多了什么? 1.2.2 提出一個問題:什么時候要使用記憶化搜索呢? 1.3 解法三:動態(tài)規(guī)劃 1.3.1 先復(fù)習(xí)一下動態(tài)規(guī)劃的核心步驟(5個),并將動態(tài)規(guī)劃的每一步對應(yīng)

    2024年01月20日
    瀏覽(19)
  • 【二叉樹part01】| 二叉樹的遞歸遍歷、二叉樹的迭代遍歷、二叉樹的統(tǒng)一迭代遍歷

    【二叉樹part01】| 二叉樹的遞歸遍歷、二叉樹的迭代遍歷、二叉樹的統(tǒng)一迭代遍歷

    目錄 ?二叉樹的遞歸遍歷? ?LeetCode144.前序遍歷 ?LeetCode145.二叉樹的后序遍歷? ?LeetCode94.二叉樹的中序遍歷? ?二叉樹的迭代遍歷? ??LeetCode144.前序遍歷 ??LeetCode145.二叉樹的后序遍歷? ??LeetCode94.二叉樹的中序遍歷? ?二叉樹的統(tǒng)一迭代遍歷?? ??LeetCode144.前序遍

    2024年02月09日
    瀏覽(18)
  • 【C++】遞歸,搜索與回溯算法入門介紹和專題一講解

    【C++】遞歸,搜索與回溯算法入門介紹和專題一講解

    個人主頁:??在肯德基吃麻辣燙 我的gitee:C++倉庫 個人專欄:C++專欄 從本文開始進(jìn)入遞歸,搜索與回溯算法專題講解。 遞歸就是函數(shù)自己調(diào)用自己。 遞歸的本質(zhì)是: 主問題:—相同的子問題 子問題:—相同的子問題 通過: 1)通過遞歸的細(xì)節(jié)展開圖(前期可以,過了前期

    2024年02月09日
    瀏覽(15)
  • 二叉樹的遍歷(遞歸法)

    遞歸的三要素: ①確定遞歸函數(shù)的參數(shù)和返回值 ②確定終止條件 ③確定單層遞歸的邏輯 以前序遍歷為例: 1、確定遞歸函數(shù)的參數(shù)和返回值: 參數(shù)中需要傳入list來存放節(jié)點的數(shù)值,除了這一點就不需要再處理什么數(shù)據(jù)了也不需要有返回值,因此遞歸函數(shù)的返回類型就是v

    2024年01月17日
    瀏覽(18)
  • ※【回溯】【深度優(yōu)先前序】Leetcode 257. 二叉樹的所有路徑

    ※【回溯】【深度優(yōu)先前序】Leetcode 257. 二叉樹的所有路徑

    ---------------????257. 二叉樹的所有路徑 題目鏈接????------------------- 時間復(fù)雜度O(N) 空間復(fù)雜度O(N) 深度優(yōu)先遍歷 添加了 StringBulider 替代字符串拼接提升效率 toString() 轉(zhuǎn)化為String .append() 添加元素 時間復(fù)雜度O(N) 空間復(fù)雜度O(N)

    2024年02月20日
    瀏覽(25)
  • 二叉樹的非遞歸遍歷算法

    二叉樹的非遞歸遍歷算法

    二叉樹的遍歷是指訪問二叉樹的每個結(jié)點,且每個結(jié)點僅被訪問一次。二叉樹的遍歷可按二叉樹的構(gòu)成以及訪問結(jié)點的順序分為4種方式:先序遍歷、中序遍歷、后序遍歷和層次遍歷。請至少給出其中一種遍歷方式的非遞歸算法的思路和代碼,并舉例演示算法的執(zhí)行過程。 算

    2023年04月24日
    瀏覽(20)
  • 【LeetCode】105. 從前序與中序遍歷序列構(gòu)造二叉樹,106. 從中序與后序遍歷序列構(gòu)造二叉樹,144. 二叉樹的前序遍歷非遞歸實現(xiàn),94. 二叉樹的中序遍歷非遞歸實現(xiàn),145. 二叉樹的后序

    【LeetCode】105. 從前序與中序遍歷序列構(gòu)造二叉樹,106. 從中序與后序遍歷序列構(gòu)造二叉樹,144. 二叉樹的前序遍歷非遞歸實現(xiàn),94. 二叉樹的中序遍歷非遞歸實現(xiàn),145. 二叉樹的后序

    給定兩個整數(shù)數(shù)組 preorder 和 inorder ,其中 preorder 是二叉樹的 先序遍歷 , inorder 是同一棵樹的 中序遍歷 ,請構(gòu)造二叉樹并返回其根節(jié)點。 示例 輸入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] 輸出: [3,9,20,null,null,15,7] 給定兩個整數(shù)數(shù)組 inorder 和 postorder ,其中 inorder 是二叉樹的

    2024年02月04日
    瀏覽(28)
  • 二叉樹的遍歷的遞歸與非遞歸算法

    二叉樹的遍歷的遞歸與非遞歸算法

    按照一定規(guī)律對二叉樹的 每個結(jié)點進(jìn)行訪問且 僅訪問一次 ; 這里的訪問:可以是計算二叉樹中的結(jié)點數(shù)據(jù),打印該結(jié)點的信息,也可以是對結(jié)點進(jìn)行的任何其它操作! 為什么需要遍歷二叉樹? 從過遍歷可以得到訪問結(jié)點的順序序列,遍歷操作就是將二叉樹的結(jié)點按一定的

    2024年04月15日
    瀏覽(27)
  • 二叉樹的遞歸遍歷與迭代遍歷(圖示)

    二叉樹的遞歸遍歷與迭代遍歷(圖示)

    本文將講述二叉樹遞歸與迭代的相關(guān)知識。 ??作者: 迷茫的啟明星 專欄:【數(shù)據(jù)結(jié)構(gòu)從0到1】 相關(guān)文章:《數(shù)據(jù)結(jié)構(gòu)二叉樹的鏈?zhǔn)酱鎯χv解及前中后序遍歷和層次遍歷》 ??歡迎關(guān)注:??點贊??收藏??留言 ?? 碼字不易,你的??點贊??收藏??關(guān)注對我真的很重要,有

    2024年02月04日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包