[抄题]:

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:

  1. Input: [1,2,3,4,5]
  2.  
  3. 1
  4. / \
  5. 2 3
  6. / \
  7. 4 5
  8.  
  9. Output: return the root of the binary tree [4,5,2,#,#,3,1]
  10.  
  11. 4
  12. / \
  13. 5 2
  14. / \
  15. 3 1

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

[英文数据结构或算法,为什么不用别的数据结构或算法]:

二叉树中用left/right是recursive,类似图中的公式

一个个节点去写是iterative,类似图中的for循环

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

六步里面:要提前把temp节点存起来,传递给cur.left

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[算法思想:迭代/递归/分治/贪心]:

[关键模板化代码]:

  1. TreeNode类这样写 另外加一个item参数 相当于新建指针了
    然后solution里要包括一个root
  1. class TreeNode
  2. {
  3. int data;
  4. TreeNode left, right;
  5.  
  6. //parameter is another item
  7. TreeNode(int item) {
  8. data = item;
  9. left = right = null;
  10. }
  11. }

新建节点需要tree.root = new,调用数据需要.data

  1. class MyCode {
  2. public static void main (String[] args) {
  3. Solution tree = new Solution();
  4. tree.root = new TreeNode(1);
  5. tree.root.left = new TreeNode(2);
  6. tree.root.right = new TreeNode(3);
  7. tree.root.left.left = new TreeNode(4);
  8. tree.root.left.right = new TreeNode(5);
  9.  
  10. TreeNode t = tree.upsideDownBinaryTree(tree.root);
  11. System.out.println("t.root.data = " + t.data);
  12. System.out.println("t.root.left.data = " + t.left.data);
  13. }

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

[是否头一次写此类driver funcion的代码] :

  1. // package whatever; // don't place package name!
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5. import java.lang.*;
  6.  
  7. class TreeNode
  8. {
  9. int data;
  10. TreeNode left, right;
  11.  
  12. //parameter is another item
  13. TreeNode(int item) {
  14. data = item;
  15. left = right = null;
  16. }
  17. }
  18.  
  19. class Solution {
  20. //new root
  21. TreeNode root;
  22. //method, need parameter, there is return
  23. public TreeNode upsideDownBinaryTree(TreeNode root) {
  24. //ini: prev, cur, next;
  25. TreeNode cur = root;
  26. TreeNode prev = null;
  27. TreeNode temp = null;
  28. TreeNode next = null;
  29.  
  30. //iteration
  31. while (cur != null) {
  32. next = cur.left;
  33. cur.left = temp;
  34. temp = cur.right;
  35. cur.right = prev;
  36.  
  37. prev = cur;
  38. cur = next;
  39. }
  40.  
  41. return prev;
  42. }
  43. }
  44.  
  45. class MyCode {
  46. public static void main (String[] args) {
  47. Solution tree = new Solution();
  48. tree.root = new TreeNode(1);
  49. tree.root.left = new TreeNode(2);
  50. tree.root.right = new TreeNode(3);
  51. tree.root.left.left = new TreeNode(4);
  52. tree.root.left.right = new TreeNode(5);
  53.  
  54. TreeNode t = tree.upsideDownBinaryTree(tree.root);
  55. System.out.println("t.root.data = " + t.data);
  56. System.out.println("t.root.left.data = " + t.left.data);
  57. }
  58. }

[潜台词] :

156. Binary Tree Upside Down反转二叉树的更多相关文章

  1. [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 ...

  2. ✡ leetcode 156. Binary Tree Upside Down 旋转树 --------- java

    156. Binary Tree Upside Down Add to List QuestionEditorial Solution My Submissions   Total Accepted: ...

  3. [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 ...

  4. 156. Binary Tree Upside Down

    题目: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node ...

  5. 【LeetCode】156. Binary Tree Upside Down 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址:https://leet ...

  6. [LeetCode#156] Binary Tree Upside Down

    Problem: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left ...

  7. [LC] 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 ...

  8. [LeetCode] Binary Tree Right Side View 二叉树的右侧视图

    Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...

  9. [Locked] Binary Tree Upside Down

    Binary Tree Upside Down Given a binary tree where all the right nodes are either leaf nodes with a s ...

随机推荐

  1. 戴尔R710服务器安装系统——配置raid

    一,内存二,硬盘(分区,数据量大小)三,电源线,网络线四,raid(raid0,raid1,raid5) 从这里开始 1.进入系统时不用管,默认进入即可 2.在读完内存消息之后,开始读取磁盘消息,在出 ...

  2. 基于redis的 分布式锁 Java实现

    package com.hs.services.lock; import java.util.concurrent.TimeUnit; import javax.annotation.Resource ...

  3. [C#]时间格式和字符串的相互转换

    一.字符串转化为时间格式 string date = "2018/9/27 10:53:56"; DateTime dt1 = DateTime.Parse(date);//方式1 ...

  4. 【转】Entity Framework 复杂类型

    为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string CompanyN ...

  5. c语言fork 多进程

    fork函数的作用 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两 ...

  6. MySQL 批量添加

    自己封装的一个批量添加. $data 是一个二维数组.key对应是数据表的字段名: /** * 批量创建 * @param array $data * @return int $res 影响行 * @ ...

  7. windwos下基于exp的提权

    00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...

  8. KMS服务器激活WIN方法

    KMS激活的过程简单说就是:欲激活的电脑向KMS服务器请求,KMS服务器做出回应同意激活. KMS激活软件是将KMS服务器用一段代码来模拟,做成一个可执行的程序(即所谓的KMS伺服器).KMS激活软件 ...

  9. Includes() vs indexOf() in JavaScript

    碰到一个问题, 部分机器网页数据源不正常, 简单排查发现是使用了较新的Array.includs 方法. 查了下兼容性, chrome 需要47版本以后支持, 客户机果然是很久的43版本. 用Arra ...

  10. MyElipse10添加Git

    1.下载对应MyEclipse的egit,教程用的是22.2的 http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_ ...