最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java面試題解LeetCode27二叉樹的鏡像實(shí)例

 更新時(shí)間:2023年01月05日 10:17:58   作者:itbird01  
這篇文章主要為大家介紹了java面試題解LeetCode27二叉樹的鏡像實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

LeetCode27. 二叉樹的鏡像 請完成一個(gè)函數(shù),輸入一個(gè)二叉樹,該函數(shù)輸出它的鏡像。

例如輸入:

4

/
2 7 / \ /
1 3 6 9 鏡像輸出:

4

/
7 2 / \ /
9 6 3 1

示例 1: 輸入:root = [4,2,7,1,3,6,9] 輸出:[4,7,2,9,6,3,1]

限制: 0 <= 節(jié)點(diǎn)個(gè)數(shù) <= 1000

解題思路

方法一:遞歸法

根據(jù)二叉樹鏡像的定義,考慮遞歸遍歷(dfs)二叉樹,交換每個(gè)節(jié)點(diǎn)的左 / 右子節(jié)點(diǎn),即可生成二叉樹的鏡像。 遞歸解析: 終止條件: 當(dāng)節(jié)點(diǎn) rootroot 為空時(shí)(即越過葉節(jié)點(diǎn)),則返回 nullnull ; 遞推工作: 初始化節(jié)點(diǎn) tmptmp ,用于暫存 rootroot 的左子節(jié)點(diǎn); 開啟遞歸 右子節(jié)點(diǎn) mirrorTree(root.right)mirrorTree(root.right) ,并將返回值作為 rootroot 的 左子節(jié)點(diǎn) 。 開啟遞歸 左子節(jié)點(diǎn) mirrorTree(tmp)mirrorTree(tmp) ,并將返回值作為 rootroot 的 右子節(jié)點(diǎn) 。 返回值: 返回當(dāng)前節(jié)點(diǎn) rootroot ;

Q: 為何需要暫存 rootroot 的左子節(jié)點(diǎn)? A: 在遞歸右子節(jié)點(diǎn) “root.left = mirrorTree(root.right);root.left=mirrorTree(root.right);” 執(zhí)行完畢后, root.leftroot.left 的值已經(jīng)發(fā)生改變,此時(shí)遞歸左子節(jié)點(diǎn) mirrorTree(root.left)mirrorTree(root.left) 則會(huì)出問題。

class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if(root == null) return null;
        TreeNode tmp = root.left;
        root.left = mirrorTree(root.right);
        root.right = mirrorTree(tmp);
        return root;
    }
}

方法二:輔助棧(或隊(duì)列)

利用棧(或隊(duì)列)遍歷樹的所有節(jié)點(diǎn) nodenode ,并交換每個(gè) nodenode 的左 / 右子節(jié)點(diǎn)。 算法流程: 特例處理: 當(dāng) rootroot 為空時(shí),直接返回 nullnull ; 初始化: 棧(或隊(duì)列),本文用棧,并加入根節(jié)點(diǎn) rootroot 。 循環(huán)交換: 當(dāng)棧 stackstack 為空時(shí)跳出; 出棧: 記為 nodenode ; 添加子節(jié)點(diǎn): 將 nodenode 左和右子節(jié)點(diǎn)入棧; 交換: 交換 nodenode 的左 / 右子節(jié)點(diǎn)。 返回值: 返回根節(jié)點(diǎn) rootroot 。

class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if(root == null) return null;
        Stack<TreeNode> stack = new Stack<>() {{ add(root); }};
        while(!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if(node.left != null) stack.add(node.left);
            if(node.right != null) stack.add(node.right);
            TreeNode tmp = node.left;
            node.left = node.right;
            node.right = tmp;
        }
        return root;
    }
}

以上就是java面試題解LeetCode27二叉樹的鏡像實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于java面試LeetCode二叉樹鏡像的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA日志框架之JUL、JDK原生日志框架詳解

    JAVA日志框架之JUL、JDK原生日志框架詳解

    Java語言的強(qiáng)大之處就是因?yàn)樗鼜?qiáng)大而且成熟的生態(tài)體系,其中包括日志框架,下面這篇文章主要給大家介紹了關(guān)于JAVA日志框架之JUL、JDK原生日志框架的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Springboot整合knife4j與shiro的操作

    Springboot整合knife4j與shiro的操作

    這篇文章主要介紹了Springboot整合knife4j與shiro的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring實(shí)現(xiàn)泛型注入的示例詳解

    Spring實(shí)現(xiàn)泛型注入的示例詳解

    Spring?4.0版本中更新了很多新功能,其中比較重要的一個(gè)就是對帶泛型的Bean進(jìn)行依賴注入的支持。本文將通過實(shí)例詳細(xì)講講Spring如何實(shí)現(xiàn)泛型注入,需要的可以參考一下
    2022-07-07
  • Java 控制線程的方法

    Java 控制線程的方法

    這篇文章主要介紹了Java 控制線程的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié)

    SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié)

    這篇文章主要介紹了SpringMVC實(shí)現(xiàn)Controller的三種方式總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java 在 Word 文檔中使用新文本替換指定文本的方法

    Java 在 Word 文檔中使用新文本替換指定文本的方法

    這篇文章主要介紹了Java 在 Word 文檔中使用新文本替換指定文本的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java Socket編程實(shí)例(二)- UDP基本使用

    Java Socket編程實(shí)例(二)- UDP基本使用

    這篇文章主要講解Java Socket編程中UDP的基本使用,希望能給大家做一個(gè)參考。
    2016-06-06
  • Spring自定義配置Schema可擴(kuò)展(一)

    Spring自定義配置Schema可擴(kuò)展(一)

    本教程主要介紹如何擴(kuò)展Spring的xml配置,讓Spring能夠識(shí)別我們自定義的Schema和Annotation,,需要的朋友可以參考下
    2016-01-01
  • Java的Dialog和FileDialog你知道啊

    Java的Dialog和FileDialog你知道啊

    這篇文章主要為大家詳細(xì)介紹了Java的Dialog和FileDialog,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java中ThreadPoolExecutor拒絕策略踩坑

    Java中ThreadPoolExecutor拒絕策略踩坑

    本文主要介紹了Java中ThreadPoolExecutor拒絕策略踩坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評論

河津市| 枣阳市| 万载县| 温宿县| 昭苏县| 浑源县| 宜城市| 沂水县| 凤山县| 苗栗县| 江安县| 嘉兴市| 区。| 青神县| 雷波县| 宁安市| 桑日县| 龙口市| 镇巴县| 浮梁县| 大渡口区| 石台县| 贞丰县| 乌拉特后旗| 台江县| 三台县| 林口县| 东丽区| 东安县| 响水县| 青海省| 辽阳市| 临沂市| 闸北区| 阳新县| 宁远县| 大关县| 绥德县| 商丘市| 古交市| 浙江省|