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.

  • 相关阅读:
    使用Docker搭建nginx环境
    使用Docker搭建apache环境
    字符编码-字库表,字符集,字符编码
    go中的sync.pool源码剖析
    JAVA基础语法
    Linux 文件目录管理
    c++ 学习之常用时间函数一览
    MySQL Innodb 中的锁
    MySQL 索引与 B+ 树
    MySQL 表分区操作详解
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5206017.html
Copyright © 2011-2022 走看看