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

【算法第十一天7.25】二叉樹(shù)前、中、后遞歸、非遞歸遍歷

這篇具有很好參考價(jià)值的文章主要介紹了【算法第十一天7.25】二叉樹(shù)前、中、后遞歸、非遞歸遍歷。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

鏈接:力扣94-二叉樹(shù)中序遍歷

鏈接:力扣144-二叉樹(shù)前序遍歷

鏈接:力扣145-二叉樹(shù)后序遍歷

樹(shù)的結(jié)構(gòu)

 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }

================================================

鏈接:力扣94-二叉樹(shù)中序遍歷

遞歸

思路

1、確定返回值和方法參數(shù):需要集合來(lái)存放樹(shù)各節(jié)點(diǎn)的值,最后打印出來(lái),所以需要一個(gè)list集合作為參數(shù),不斷迭代;除此之外不需要有返回值

2、確定終止條件:當(dāng)前節(jié)點(diǎn)為空時(shí),則需要結(jié)束本次方法調(diào)用(結(jié)束本次遞歸),用return

3、確定單次遞歸邏輯:中序遍歷,左中右 處理,對(duì)root的處理就是加入到集合中

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        inorder(root, res);
        return res;
    }

    public void inorder(TreeNode root, List<Integer> list){
        // 當(dāng)前傳入的root為null結(jié)束本方法的執(zhí)行,繼續(xù)下面方法的執(zhí)行
        if(root == null) return;
        inorder(root.left,list);
        list.add(root.val);
        inorder(root.right,list);
    }
}

非遞歸

思路

1、終止條件:棧為空 且 cur節(jié)點(diǎn)為空

2、如果左孩子一直不為空,則需要一直入棧

3、左孩子為空后,則開(kāi)始pop節(jié)點(diǎn)(入集合),pop出的節(jié)點(diǎn)也要看其左孩子,所以cur要指向pop出的節(jié)點(diǎn),繼續(xù)判斷其左孩子

class Solution {
    public List<Integer> inorderTraversal(TreeNode root){
        Stack<TreeNode> stack = new Stack<>();
        List<Integer> res = new ArrayList<>();
        if(root == null) return res;
        TreeNode cur = root;
        // 這里除了判空,也有可能棧空了,但是右節(jié)點(diǎn)還沒(méi)有處理(未入棧)
        while(!stack.isEmpty() || cur != null){
            // 如果左孩子一直存在,則要一路把左孩子都存進(jìn)去,直到cur為空
            if(cur != null){
                stack.push(cur);
                cur = cur.left;
            // cur為空時(shí),則說(shuō)明左邊已經(jīng)循環(huán)到低了,可以開(kāi)始pop并入集合
            // 也需要開(kāi)始處理右節(jié)點(diǎn),右節(jié)點(diǎn)處理也是要一路把左節(jié)點(diǎn)先存進(jìn)去,重復(fù)上述步驟
            // 所以要將右節(jié)點(diǎn)命為cur,也就是要處理的節(jié)點(diǎn)
            }else{
                cur = stack.pop();
                res.add(cur.val);
                cur = cur.right;
            }
        }
        return res;
    }
}

鏈接:力扣144-二叉樹(shù)前序遍歷

遞歸

思路

1、確定返回值和方法參數(shù):需要集合來(lái)存放樹(shù)各節(jié)點(diǎn)的值,最后打印出來(lái),所以需要一個(gè)list集合作為參數(shù),不斷迭代;除此之外不需要有返回值

2、確定終止條件:當(dāng)前節(jié)點(diǎn)為空時(shí),則需要結(jié)束本次方法調(diào)用(結(jié)束本次遞歸),用return

3、確定單次遞歸邏輯:前序遍歷,中左右 處理,對(duì)root的處理就是加入到集合中,對(duì)左右節(jié)點(diǎn)處理,就是不斷遞歸

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        preorder(root,res);
        return res;
    }
    public void preorder(TreeNode root, List<Integer> list){
        if(root == null) return;
        list.add(root.val);
        preorder(root.left,list);
        preorder(root.right,list);
    }
}

非遞歸

思路

1、先讓root入棧,接著pop出來(lái),定義為node,先把node.val添加到集合中,再去判斷其是否有左右孩子,一定先右后左,出棧順序相反

2、循環(huán)終止條件:棧為空則說(shuō)明所有節(jié)點(diǎn)已經(jīng)處理完畢

class Solution {
    public List<Integer> preorderTraversal(TreeNode root){
        Stack<TreeNode> stack = new Stack<>();
        List<Integer> res = new ArrayList<>();
        if(root == null) return res;
        stack.push(root);
        // 這里除了判空,不需要其它條件,即使出??樟?,后面還會(huì)有節(jié)點(diǎn)push進(jìn)去
        while(!stack.isEmpty()){
            TreeNode node = stack.pop();
            res.add(node.val);
            if(node.right != null) stack.push(node.right);
            if(node.left != null) stack.push(node.left);
        }
        return res;
    }
}

鏈接:力扣145-二叉樹(shù)后序遍歷

遞歸

思路

1、確定返回值和方法參數(shù):需要集合來(lái)存放樹(shù)各節(jié)點(diǎn)的值,最后打印出來(lái),所以需要一個(gè)list集合作為參數(shù),不斷迭代;除此之外不需要有返回值

2、確定終止條件:當(dāng)前節(jié)點(diǎn)為空時(shí),則需要結(jié)束本次方法調(diào)用(結(jié)束本次遞歸),用return

3、確定單次遞歸邏輯:后序遍歷,左右中 處理,對(duì)**root(傳入節(jié)點(diǎn))**的處理就是加入到集合中,對(duì)左右節(jié)點(diǎn)處理,就是不斷遞歸

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        postorder(root,res);
        return res;
    }
    public void postorder(TreeNode root, List<Integer> list){
        if(root == null) return;
        postorder(root.left, list);
        postorder(root.right,list);
        list.add(root.val);
    }
}

非遞歸

思路

入棧順序中、左、右;出棧順序:中、右、左;翻轉(zhuǎn)順序:左、右、中文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-608269.html

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        if (root == null) return res;
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()){
            TreeNode node = stack.pop();
            res.add(node.val);
            if (node.left != null){
                stack.push(node.left);
            }
            if (node.right != null){
                stack.push(node.right);
            }
        }
        // 入棧順序中、左、右;出棧順序:中、右、左;翻轉(zhuǎn)順序:左、右、中
        Collections.reverse(res);
        return res;
    }
}

到了這里,關(guān)于【算法第十一天7.25】二叉樹(shù)前、中、后遞歸、非遞歸遍歷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • node 第二十一天 webpack 初見(jiàn)

    為什么需要學(xué)習(xí)(了解)webpack webpack是前端工程化的基石,webpack又是基于node進(jìn)行文件打包bundle,所以作為前端起手學(xué)習(xí)node服務(wù)端開(kāi)發(fā),同時(shí)學(xué)習(xí)webpack是很有必要的。 隨著vite的出現(xiàn),vue這一脈可能也許不再需要學(xué)習(xí)webpack了,但是需要知道的是, 打包一定是前端工程化繞不

    2024年01月16日
    瀏覽(26)
  • 學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】

    學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】

    ========================================================================= 相關(guān)代碼gitee自取 :C語(yǔ)言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 學(xué)C的第三十天【自定義類型:結(jié)構(gòu)體、枚舉、聯(lián)合】_高高的胖子的博客-CSDN博客 ?==============

    2024年02月15日
    瀏覽(30)
  • 15天學(xué)習(xí)MySQL計(jì)劃-MySQL工具(進(jìn)階篇)-第十一天

    1.mysql 該mysql 不是指MySQL服務(wù),而是指MySQL的客戶端工具。 -e選項(xiàng)可以在MySQL客戶端執(zhí)行SQL語(yǔ)句,而不用連接到MySQL數(shù)據(jù)庫(kù)再執(zhí)行,對(duì)于一些批處理腳本,這種方式尤其方便。 2.mysqladmin mysqladmin是一個(gè)執(zhí)行管理操作的客戶端程序??梢杂盟鼇?lái)檢查服務(wù)器的配置和當(dāng)前狀態(tài),創(chuàng)建并

    2024年02月01日
    瀏覽(22)
  • 從零開(kāi)始的力扣刷題記錄-第五十一天

    題目描述: 給你一棵二叉搜索樹(shù)的 root ,請(qǐng)你 按中序遍歷 將其重新排列為一棵遞增順序搜索樹(shù),使樹(shù)中最左邊的節(jié)點(diǎn)成為樹(shù)的根節(jié)點(diǎn),并且每個(gè)節(jié)點(diǎn)沒(méi)有左子節(jié)點(diǎn),只有一個(gè)右子節(jié)點(diǎn)。 題解: 中序遍歷存儲(chǔ)節(jié)點(diǎn)后按順序連接即可 代碼(Go): 題目描述: 小扣在秋日市集發(fā)

    2024年02月08日
    瀏覽(25)
  • 谷粒商城第十一天-完善商品分組(主要添上關(guān)聯(lián)屬性)

    谷粒商城第十一天-完善商品分組(主要添上關(guān)聯(lián)屬性)

    目錄 一、總述 二、前端部分 2.1 改良前端獲取分組列表接口及其調(diào)用 2.2 添加關(guān)聯(lián)的一整套邏輯 三、后端部分 四、總結(jié) 前端部分和之前的商品品牌添加分類差不多。 也是修改一下前端的分頁(yè)獲取列表的接口,還有就是加上關(guān)聯(lián)的那一套邏輯,包括基本構(gòu)件的引入、數(shù)據(jù)域的

    2024年02月13日
    瀏覽(104)
  • 從零開(kāi)始的力扣刷題記錄-第六十一天

    題目描述: 給定由一些正數(shù)(代表長(zhǎng)度)組成的數(shù)組 nums ,返回 由其中三個(gè)長(zhǎng)度組成的、面積不為零的三角形的最大周長(zhǎng) 。如果不能形成任何面積不為零的三角形,返回 0。 題解: 排序后從后往前遍歷,取最大的三個(gè)邊,如果滿足兩邊之和大于第三邊則返回,否則整體向前

    2024年02月09日
    瀏覽(25)
  • 【三十天精通Vue 3】第十一天 Vue 3 過(guò)渡和動(dòng)畫(huà)詳解

    【三十天精通Vue 3】第十一天 Vue 3 過(guò)渡和動(dòng)畫(huà)詳解

    ?創(chuàng)作者:陳書(shū)予 ??個(gè)人主頁(yè):陳書(shū)予的個(gè)人主頁(yè) ??陳書(shū)予的個(gè)人社區(qū),歡迎你的加入: 陳書(shū)予的社區(qū) ??專欄地址: 三十天精通 Vue 3

    2023年04月17日
    瀏覽(20)
  • 秒懂百科,C++如此簡(jiǎn)單丨第二十一天:棧和隊(duì)列

    秒懂百科,C++如此簡(jiǎn)單丨第二十一天:棧和隊(duì)列

    目錄 前言 Everyday English 棧(Stack) 圖文解釋 實(shí)現(xiàn)添加刪除元素 實(shí)現(xiàn)查看清空棧 完整代碼 運(yùn)行示例 棧的選擇題 隊(duì)列(Queue) 圖文解釋 隊(duì)列的基本用法 完整代碼? 運(yùn)行結(jié)果? 隊(duì)列的好處? 結(jié)尾? 今天我們將學(xué)習(xí)兩個(gè)新的數(shù)據(jù)結(jié)構(gòu)——棧和隊(duì)列。 A friend in need is a friend indeed

    2024年02月20日
    瀏覽(24)
  • 第六十一天學(xué)習(xí)記錄:C語(yǔ)言進(jìn)階:C語(yǔ)言預(yù)處理1

    第六十一天學(xué)習(xí)記錄:C語(yǔ)言進(jìn)階:C語(yǔ)言預(yù)處理1

    在ANSI C的任何一種實(shí)現(xiàn)中,存在兩個(gè)不同的環(huán)境。 第一種是翻譯環(huán)境,在這個(gè)環(huán)境中源代碼被轉(zhuǎn)換為可執(zhí)行的機(jī)器指令。第2種是執(zhí)行環(huán)境,它用于實(shí)際執(zhí)行代碼。 翻譯環(huán)境 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/04bd03e2cb554aa298fb6a8349722f89.png 上圖截取自比特科技免費(fèi)課程

    2024年02月07日
    瀏覽(21)
  • 【80天學(xué)習(xí)完《深入理解計(jì)算機(jī)系統(tǒng)》】第十一天 3.4 跳轉(zhuǎn)指令

    【80天學(xué)習(xí)完《深入理解計(jì)算機(jī)系統(tǒng)》】第十一天 3.4 跳轉(zhuǎn)指令

    專注 效率 記憶 預(yù)習(xí) 筆記 復(fù)習(xí) 做題 歡迎觀看我的博客,如有問(wèn)題交流,歡迎評(píng)論區(qū)留言,一定盡快回復(fù)?。ù蠹铱梢匀タ次业膶冢撬形恼碌哪夸洠?文章字體風(fēng)格: 紅色文字表示:重難點(diǎn)★? 藍(lán)色文字表示:思路以及想法★? 如果大家覺(jué)得有幫助的話,感謝大家?guī)?/p>

    2024年02月11日
    瀏覽(38)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包