zoukankan      html  css  js  c++  java
  • LeetCode 156. Binary Tree Upside Down

    原题链接在这里:https://leetcode.com/problems/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.

    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,#,#,3,1].

       4
      / 
     5   2
        / 
       3   1  

    题解:

    Recursion 方法是自底向上.

    Time Complexity: O(n).

    Space: O(n). tree height.

    AC Java:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public TreeNode upsideDownBinaryTree(TreeNode root) {
    12         if(root == null || root.left  == null){
    13             return root;
    14         }
    15         TreeNode newRoot = upsideDownBinaryTree(root.left);
    16         
    17         root.left.left = root.right;
    18         root.left.right = root;
    19         
    20         root.left = null;
    21         root.right = null;
    22         return newRoot;
    23     }
    24 }

    Iterative 是从上到下.

    Time Complexity: O(n). Space: O(1).

    AC Java:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public TreeNode upsideDownBinaryTree(TreeNode root) {
    12         if(root == null || root.left  == null){
    13             return root;
    14         }
    15         TreeNode cur = root;
    16         TreeNode next = null;
    17         TreeNode pre = null;
    18         TreeNode temp = null;
    19         while(cur != null){
    20             next = cur.left;
    21             cur.left = temp;
    22             temp = cur.right;
    23             cur.right = pre;
    24             pre = cur;
    25             cur = next;
    26         }
    27         return pre;
    28     }
    29 }

    类似Reverse Linked List.

  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5206017.html
Copyright © 2011-2022 走看看