<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)156:上下翻轉(zhuǎn)二叉樹

          共 2444字,需瀏覽 5分鐘

           ·

          2021-01-16 13:56

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做?上下翻轉(zhuǎn)二叉樹(這題Leetcode需要會(huì)員才能看),我們先來(lái)看題面:
          https://leetcode-cn.com/problems/binary-tree-upside-down

          Given a binary tree in which all right nodes are either leaf nodes with sibling nodes (left nodes with the same parent nodes) or empty, flip the binary tree up and down and turn it into a tree, and the original right nodes will be converted into left leaf nodes. Returns the new root.? ?

          題意

          給定一個(gè)二叉樹,其中所有的右節(jié)點(diǎn)要么是具有兄弟節(jié)點(diǎn)(擁有相同父節(jié)點(diǎn)的左節(jié)點(diǎn))的葉節(jié)點(diǎn),要么為空,將此二叉樹上下翻轉(zhuǎn)并將它變成一棵樹, 原來(lái)的右節(jié)點(diǎn)將轉(zhuǎn)換成左葉節(jié)點(diǎn)。返回新的根。

          樣例

          解題

          https://blog.csdn.net/qq_32424059/article/details/93920527


          思路1:遞歸

          對(duì)于root而言,root應(yīng)該成為root.left的右孩子,root.right應(yīng)該成為root.left的左孩子。最后返回的是root.left處理之后的返回值。

          class?Solution(object):
          ????def?upsideDownBinaryTree(self, root):
          ????????"""
          ????????:type root: TreeNode
          ????????:rtype: TreeNode
          ????????"""

          ????????#每一個(gè)節(jié)點(diǎn)變成其左孩子的右節(jié)點(diǎn)
          ????????if?not?root or?(not?root.left and?not?root.right):
          ????????????return?root
          ?
          ????????newroot = self.upsideDownBinaryTree(root.left)
          ????????# self.upsideDownBinaryTree(root.right) 右孩子不用處理 因?yàn)橐床淮嬖谝词侨~節(jié)點(diǎn)
          ????????
          ????????root.left.left = root.right
          ????????root.left.right = root
          ????????root.left = None
          ????????root.right = None
          ?
          ????????return?newroot


          思路2:迭代
          對(duì)于任意node,假設(shè)我們已經(jīng)知道了它的父節(jié)點(diǎn)和兄弟節(jié)點(diǎn),
          先把node.left, node.right備份好,
          然后node.left 就是兄弟節(jié)點(diǎn), node.right就是父節(jié)點(diǎn)。
          下一次循環(huán)處理備份好的原來(lái)的node.left。

          class?Solution(object):
          ????def?upsideDownBinaryTree(self, root):
          ????????"""
          ????????:type root: TreeNode
          ????????:rtype: TreeNode
          ????????"""

          ????????#每一個(gè)節(jié)點(diǎn)變成其左孩子的右節(jié)點(diǎn)
          ????????if?not?root or?(not?root.left and?not?root.right):
          ????????????return?root
          ?
          ????????parent, sibling = None, None
          ????????while?root:
          ????????????tmp = root.left
          ????????????root.left = sibling
          ????????????
          ????????????sibling = root.right
          ????????????root.right = parent
          ????????????
          ????????????parent = root
          ????????????root = tmp
          ????????????
          ????????return?parent

          好了,今天的文章就到這里,如果覺得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力。

          上期推文:

          LeetCode1-140題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)141:環(huán)形鏈表
          LeetCode刷題實(shí)戰(zhàn)142:環(huán)形鏈表 II
          LeetCode刷題實(shí)戰(zhàn)143:重排鏈表
          LeetCode刷題實(shí)戰(zhàn)144:二叉樹的前序遍歷
          LeetCode刷題實(shí)戰(zhàn)145:二叉樹的后序遍歷
          LeetCode刷題實(shí)戰(zhàn)146:LRU 緩存機(jī)制
          LeetCode刷題實(shí)戰(zhàn)147:對(duì)鏈表進(jìn)行插入排序
          LeetCode刷題實(shí)戰(zhàn)148:排序鏈表
          LeetCode刷題實(shí)戰(zhàn)149:直線上最多的點(diǎn)數(shù)
          LeetCode刷題實(shí)戰(zhàn)150:逆波蘭表達(dá)式求值
          LeetCode刷題實(shí)戰(zhàn)151:翻轉(zhuǎn)字符串里的單詞
          LeetCode刷題實(shí)戰(zhàn)152:乘積最大子數(shù)組
          LeetCode刷題實(shí)戰(zhàn)153:尋找旋轉(zhuǎn)排序數(shù)組中的最小值
          LeetCode刷題實(shí)戰(zhàn)154:尋找旋轉(zhuǎn)排序數(shù)組中的最小值 II
          LeetCode刷題實(shí)戰(zhàn)155:最小棧


          瀏覽 108
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕天堂网 | 亚洲九九九九九 | 在线无码一区二区三区 | 中文字幕人妻一区二区三区 | 黄色一级免费看 |