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

C++實(shí)現(xiàn)LeetCode(156.二叉樹的上下顛倒)

 更新時(shí)間:2021年07月30日 14:20:25   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(156.二叉樹的上下顛倒),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 156. Binary Tree Upside Down 二叉樹的上下顛倒

Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that shares the same parent node) or empty, flip it upside down and turn it into a tree where the original right nodes turned into left leaf nodes. Return the new root.

Example:

Input: [1,2,3,4,5]

    1
/ \
2   3
/ \
4   5

Output: return the root of the binary tree [4,5,2,#,#,3,1]

   4
/ \
5   2
/ \
3   1  

Clarification:

Confused what [4,5,2,#,#,3,1] means? Read more below on how binary tree is serialized on OJ.

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1
/ \
2   3
/
4
\
5

The above binary tree is serialized as [1,2,3,#,#,4,#,#,5].

這道題讓我們把一棵二叉樹上下顛倒一下,而且限制了右節(jié)點(diǎn)要么為空要么一定會有對應(yīng)的左節(jié)點(diǎn)。上下顛倒后原來二叉樹的最左子節(jié)點(diǎn)變成了根節(jié)點(diǎn),其對應(yīng)的右節(jié)點(diǎn)變成了其左子節(jié)點(diǎn),其父節(jié)點(diǎn)變成了其右子節(jié)點(diǎn),相當(dāng)于順時(shí)針旋轉(zhuǎn)了一下。對于一般樹的題都會有迭代和遞歸兩種解法,這道題也不例外,先來看看遞歸的解法。對于一個(gè)根節(jié)點(diǎn)來說,目標(biāo)是將其左子節(jié)點(diǎn)變?yōu)楦?jié)點(diǎn),右子節(jié)點(diǎn)變?yōu)樽笞庸?jié)點(diǎn),原根節(jié)點(diǎn)變?yōu)橛易庸?jié)點(diǎn),首先判斷這個(gè)根節(jié)點(diǎn)是否存在,且其有沒有左子節(jié)點(diǎn),如果不滿足這兩個(gè)條件的話,直接返回即可,不需要翻轉(zhuǎn)操作。那么不停的對左子節(jié)點(diǎn)調(diào)用遞歸函數(shù),直到到達(dá)最左子節(jié)點(diǎn)開始翻轉(zhuǎn),翻轉(zhuǎn)好最左子節(jié)點(diǎn)后,開始回到上一個(gè)左子節(jié)點(diǎn)繼續(xù)翻轉(zhuǎn)即可,直至翻轉(zhuǎn)完整棵樹,參見代碼如下:

解法一:

class Solution {
public:
    TreeNode *upsideDownBinaryTree(TreeNode *root) {
        if (!root || !root->left) return root;
        TreeNode *l = root->left, *r = root->right;
        TreeNode *res = upsideDownBinaryTree(l);
        l->left = r;
        l->right = root;
        root->left = NULL;
        root->right = NULL;
        return res;
    }
};

下面我們來看迭代的方法,和遞歸方法相反的時(shí),這個(gè)是從上往下開始翻轉(zhuǎn),直至翻轉(zhuǎn)到最左子節(jié)點(diǎn),參見代碼如下:

解法二:

class Solution {
public:
    TreeNode *upsideDownBinaryTree(TreeNode *root) {
        TreeNode *cur = root, *pre = NULL, *next = NULL, *tmp = NULL;
        while (cur) {
            next = cur->left;
            cur->left = tmp;
            tmp = cur->right;
            cur->right = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/156

類似題目:

Reverse Linked List

參考資料:

https://leetcode.com/problems/binary-tree-upside-down/

https://leetcode.com/problems/binary-tree-upside-down/discuss/49412/Clean-Java-solution

https://leetcode.com/problems/binary-tree-upside-down/discuss/49432/Easy-O(n)-iteration-solution-Java

https://leetcode.com/problems/binary-tree-upside-down/discuss/49406/Java-recursive-(O(logn)-space)-and-iterative-solutions-(O(1)-space)-with-explanation-and-figure

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(156.二叉樹的上下顛倒)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)二叉樹的上下顛倒內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 迷宮游戲控制臺版C++代碼

    迷宮游戲控制臺版C++代碼

    這篇文章主要為大家詳細(xì)介紹了迷宮游戲控制臺版C++代碼,可以調(diào)整大小的迷宮游戲,給定迷宮的入口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)

    C語言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)

    下面小編就為大家?guī)硪黄狢語言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • C++ 二維數(shù)組參數(shù)傳遞的實(shí)現(xiàn)方法

    C++ 二維數(shù)組參數(shù)傳遞的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++ 二維數(shù)組參數(shù)傳遞的實(shí)現(xiàn)方法的相關(guān)資料,這里提供三種方法幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • C/C++指針與內(nèi)存管理圖文詳解

    C/C++指針與內(nèi)存管理圖文詳解

    這篇文章主要為大家詳細(xì)介紹了C/C++指針與內(nèi)存管理,使用文圖并敘的方式,文中圖片介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Visual Studio 2019 Professional 激活方法詳解

    Visual Studio 2019 Professional 激活方法詳解

    這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 淺談#ifndef,#define,#endif的作用和用法

    淺談#ifndef,#define,#endif的作用和用法

    下面小編就為大家?guī)硪黄獪\談#ifndef,#define,#endif的作用和用法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解

    C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解

    單向鏈表(單鏈表)是鏈表的一種,其特點(diǎn)是鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始。本文將為大家詳細(xì)講講單向鏈表的實(shí)現(xiàn)與使用,需要的可以參考一下
    2022-08-08
  • C語言經(jīng)典指針筆試題詳解

    C語言經(jīng)典指針筆試題詳解

    今天博主來講解4道經(jīng)典的指針筆試題,很多朋友沒有深刻理解函數(shù)傳參知識都會在這些題目上出錯(cuò),下面話不多說,我們開始
    2021-10-10
  • C/C++中提高查找速度的小技巧

    C/C++中提高查找速度的小技巧

    這篇文章主要給大家介紹了C/C++中提高數(shù)組中查找某個(gè)元素或者字符串中查找某個(gè)字符效率的小技巧,提高速度對我們?nèi)粘i_發(fā)來說還是很有用的,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • C++11中初始化列表initializer lists的使用方法

    C++11中初始化列表initializer lists的使用方法

    C++11引入了初始化列表來初始化變量和對象,自定義類型,如果想用初始化列表就要包含initializer_list頭文件
    2021-09-09

最新評論

衡阳市| 保山市| 克山县| 阿巴嘎旗| 团风县| 娄底市| 临沧市| 平谷区| 双城市| 大丰市| 廊坊市| 台湾省| 凤凰县| 上栗县| 榆树市| 嵩明县| 泰安市| 康平县| 喀什市| 抚顺县| 喜德县| 东乡县| 青岛市| 高台县| 永州市| 涿州市| 丹寨县| 宜阳县| 江达县| 石楼县| 枣阳市| 蒙自县| 城市| 元谋县| 九龙城区| 大英县| 红桥区| 泾源县| 阳东县| 上高县| 济阳县|