成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Binary Tree Upside Down LC解題記錄

Shonim / 2725人閱讀

摘要:題目?jī)?nèi)容因?yàn)檫@道題被鎖住了,在寫這篇文章時(shí)還有天就要過期了,把原題也貼上來。題目要求,樹的結(jié)構(gòu)是每個(gè)當(dāng)右邊子節(jié)點(diǎn)的,它肯定有個(gè),就是它的根節(jié)點(diǎn)肯定有個(gè)左邊子節(jié)點(diǎn),也就是說它是二胎。遞歸設(shè)置終止條件,在空節(jié)點(diǎn)或最左邊的葉子處終止。

題目?jī)?nèi)容
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.

For example:
Given a binary tree {1,2,3,4,5},
    1
   / 
  2   3
 / 
4   5
return the root of the binary tree [4,5,2,null,null,3,1].
   4
  / 
 5   2
    / 
   3   1  

(因?yàn)檫@道題被鎖住了,在寫這篇文章時(shí)還有23天就要過期了,把原題也貼上來。)題目要求,樹的結(jié)構(gòu)是每個(gè)當(dāng)右邊子節(jié)點(diǎn)的,它肯定有個(gè)sibling,就是它的根節(jié)點(diǎn)肯定有個(gè)左邊子節(jié)點(diǎn),也就是說它是二胎?,F(xiàn)在要把這個(gè)樹從右往左看,要返回新的樹。

解決思路

這道題有點(diǎn)兒類似反轉(zhuǎn)鏈表,所以需要逐個(gè)修改每個(gè)節(jié)點(diǎn)的指向,以前的爺爺可能就是明天的孫子,曾經(jīng)在工科專業(yè)成績(jī)優(yōu)秀轉(zhuǎn)到CS重頭再來也是這個(gè)心情。再仔細(xì)看,對(duì)于1->2->4,想逆轉(zhuǎn)成4->2->1,其實(shí)就是左<-根->右變成了右<-左->根,好的辦法是先找到左,然后開倒車,想辦法把根和右的關(guān)系調(diào)整過來。
所以這道題用到自下而上遞歸的辦法,先找到最左邊的葉子,作為新的root,然后給新的root分配好它的left,right child。比如這個(gè)例子,先搞清楚4,5,2三個(gè)節(jié)點(diǎn)的關(guān)系,然后再向上找,搞1,2,3之間的關(guān)系。

兩個(gè)需要注意的地方,一個(gè)是如何高效的找到4,也就是最左邊的葉子。利用好遞歸方法的返回值,總會(huì)返回最小規(guī)模問題的返回值,也就是說,當(dāng)遞歸終止時(shí)的返回值就是整個(gè)遞歸方法的返回值,之前這句話講的很繞,我自己也在理解中。
第二,注意把原來根節(jié)點(diǎn)和兩個(gè)子節(jié)點(diǎn)的指針刪掉,因?yàn)樽詈笤瓉淼母?jié)點(diǎn)一定會(huì)被變成一個(gè)葉子節(jié)點(diǎn),那么葉子節(jié)點(diǎn)還指著根節(jié)點(diǎn)的話,就是個(gè)漂亮的環(huán),會(huì)出現(xiàn)stackoverflow的錯(cuò)誤。

code
public class Solution {
    public TreeNode upsideDownBinaryTree(TreeNode root) {
        //遞歸設(shè)置終止條件,在空節(jié)點(diǎn)或最左邊的葉子處終止。
        if(root == null || (root.left == null && root.right == null)) return root;
        //把最左邊的葉子拎出來作為新的root,留著返回
        TreeNode newRoot = upsideDownBinaryTree(root.left);
        //改各個(gè)節(jié)點(diǎn)之間的關(guān)系
        root.left.left = root.right;
        root.left.right = root;
        //這步非常有必要,每次改完之后把原來的節(jié)點(diǎn)關(guān)系都清空,否則成環(huán)
        root.left = null;
        root.right = null;
        
        return newRoot;
    }
}
復(fù)雜度分析

程序遍歷了所有的節(jié)點(diǎn),而且每個(gè)節(jié)點(diǎn)算是遍歷兩次,一次從上到下,一次從下到上。復(fù)雜度是O(n)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64962.html

相關(guān)文章

  • LeetCode 156 Binary Tree Upside Down 上下翻轉(zhuǎn)二叉樹

    摘要:翻轉(zhuǎn)以后如下解題思路翻轉(zhuǎn)的形式一開始不是很清楚,但是里面的高票答案給了一個(gè)很好的解釋。看例子,樹的左邊最深的底層是,是新的。對(duì)于每個(gè),將鏈接右孩子的指針去掉,將變?yōu)楫?dāng)前左孩子的,成為左孩子的。遞歸的寫法遞歸調(diào)用得到新的,并且沿途改變結(jié)構(gòu)。 LeetCode 156 Binary Tree Upside Down Given a binary tree where all the rig...

    Loong_T 評(píng)論0 收藏0
  • Strobogrammatic Number 系列 LC解題記錄(未完成)

    摘要:所以這題先建立一個(gè)對(duì)應(yīng)的,然后掃一遍字符串就可以了。復(fù)雜度分析第二題題目?jī)?nèi)容解決思路一看關(guān)鍵詞,通常都是,深搜一遍,挖地三尺,雁過拔毛。復(fù)雜度分析第三題題目?jī)?nèi)容解決思路復(fù)雜度分析 該系列共三道題,Company Tag只有一個(gè)Google,那就必須要做了。 第一題題目?jī)?nèi)容 A strobogrammatic number is a number that looks the same ...

    王晗 評(píng)論0 收藏0
  • [Leetcode-Tree]Maximum / Minimum Depth of Binary T

    摘要:解題思路用遞歸實(shí)現(xiàn)很簡(jiǎn)單,對(duì)于每個(gè)根節(jié)點(diǎn),最大深度就等于左子樹的最大深度和右子樹的最大深度的較大值。解題思路本題的注意點(diǎn)在于如果某個(gè)根節(jié)點(diǎn)有一邊的子樹為空,那么它的深度就等于另一邊不為空的子樹的深度,其他的邏輯與上一題相同。 Maximum Depth of Binary TreeGiven a binary tree, find its maximum depth. The maxi...

    Thanatos 評(píng)論0 收藏0
  • LeetCode 104 Maximum Depth of Binary Tree 二叉樹最大深度

    LeetCode 104 Maximum Depth of Binary Tree難度:Easy 題目描述:找到一顆二叉樹的最深深度。Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down ...

    PiscesYE 評(píng)論0 收藏0
  • leetcode 315 Count of Smaller Numbers After Self 以

    摘要:題目意思就是要一個(gè)個(gè)的返回當(dāng)前的最小值。所以解法自然就是。我們需要找出被打亂的點(diǎn)并返回正確結(jié)果。然后將兩個(gè)不正確的點(diǎn)記錄下來,最后回原來正確的值。如果是葉子節(jié)點(diǎn),或者只有一個(gè)子樹。思想來自于的代碼實(shí)現(xiàn)。 跳過總結(jié)請(qǐng)點(diǎn)這里:https://segmentfault.com/a/11... BST最明顯的特點(diǎn)就是root.left.val < root.val < root.right.v...

    inapt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<