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

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

 更新時間:2021年07月30日 14:20:25   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒),本篇文章通過簡要的案例,講解了該項技術(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é)點要么為空要么一定會有對應(yīng)的左節(jié)點。上下顛倒后原來二叉樹的最左子節(jié)點變成了根節(jié)點,其對應(yīng)的右節(jié)點變成了其左子節(jié)點,其父節(jié)點變成了其右子節(jié)點,相當(dāng)于順時針旋轉(zhuǎn)了一下。對于一般樹的題都會有迭代和遞歸兩種解法,這道題也不例外,先來看看遞歸的解法。對于一個根節(jié)點來說,目標(biāo)是將其左子節(jié)點變?yōu)楦?jié)點,右子節(jié)點變?yōu)樽笞庸?jié)點,原根節(jié)點變?yōu)橛易庸?jié)點,首先判斷這個根節(jié)點是否存在,且其有沒有左子節(jié)點,如果不滿足這兩個條件的話,直接返回即可,不需要翻轉(zhuǎn)操作。那么不停的對左子節(jié)點調(diào)用遞歸函數(shù),直到到達(dá)最左子節(jié)點開始翻轉(zhuǎn),翻轉(zhuǎn)好最左子節(jié)點后,開始回到上一個左子節(jié)點繼續(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;
    }
};

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

解法二:

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    Visual Studio 2019 Professional 激活方法詳解

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

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

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

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

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

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

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

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

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

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

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

最新評論

吉安市| 白朗县| 西安市| 年辖:市辖区| 镇巴县| 潼关县| 英德市| 江城| 灵璧县| 松原市| 桐梓县| 衡水市| 定襄县| 临武县| 盐城市| 常熟市| 张家界市| 南京市| 玉门市| 米易县| 肥东县| 五大连池市| 汕头市| 白银市| 罗江县| 巴青县| 山东| 木兰县| 固始县| 阿勒泰市| 贵德县| 崇信县| 昭平县| 常熟市| 托里县| 交口县| 凤台县| 平凉市| 苍山县| 毕节市| 盘锦市|