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 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:
- Input: [1,2,3,4,5]
- 1
- / \
- 2 3
- / \
- 4 5
- Output: return the root of the binary tree [4,5,2,#,#,3,1]
- 4
- / \
- 5 2
- / \
- 3 1
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
[英文数据结构或算法,为什么不用别的数据结构或算法]:
二叉树中用left/right是recursive,类似图中的公式
一个个节点去写是iterative,类似图中的for循环
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
六步里面:要提前把temp节点存起来,传递给cur.left
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
- TreeNode类这样写 另外加一个item参数 相当于新建指针了
然后solution里要包括一个root
- class TreeNode
- {
- int data;
- TreeNode left, right;
- //parameter is another item
- TreeNode(int item) {
- data = item;
- left = right = null;
- }
- }
新建节点需要tree.root = new,调用数据需要.data
- class MyCode {
- public static void main (String[] args) {
- Solution tree = new Solution();
- tree.root = new TreeNode(1);
- tree.root.left = new TreeNode(2);
- tree.root.right = new TreeNode(3);
- tree.root.left.left = new TreeNode(4);
- tree.root.left.right = new TreeNode(5);
- TreeNode t = tree.upsideDownBinaryTree(tree.root);
- System.out.println("t.root.data = " + t.data);
- System.out.println("t.root.left.data = " + t.left.data);
- }
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
- // package whatever; // don't place package name!
- import java.io.*;
- import java.util.*;
- import java.lang.*;
- class TreeNode
- {
- int data;
- TreeNode left, right;
- //parameter is another item
- TreeNode(int item) {
- data = item;
- left = right = null;
- }
- }
- class Solution {
- //new root
- TreeNode root;
- //method, need parameter, there is return
- public TreeNode upsideDownBinaryTree(TreeNode root) {
- //ini: prev, cur, next;
- TreeNode cur = root;
- TreeNode prev = null;
- TreeNode temp = null;
- TreeNode next = null;
- //iteration
- while (cur != null) {
- next = cur.left;
- cur.left = temp;
- temp = cur.right;
- cur.right = prev;
- prev = cur;
- cur = next;
- }
- return prev;
- }
- }
- class MyCode {
- public static void main (String[] args) {
- Solution tree = new Solution();
- tree.root = new TreeNode(1);
- tree.root.left = new TreeNode(2);
- tree.root.right = new TreeNode(3);
- tree.root.left.left = new TreeNode(4);
- tree.root.left.right = new TreeNode(5);
- TreeNode t = tree.upsideDownBinaryTree(tree.root);
- System.out.println("t.root.data = " + t.data);
- System.out.println("t.root.left.data = " + t.left.data);
- }
- }
[潜台词] :
156. Binary Tree Upside Down反转二叉树的更多相关文章
- [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 ...
- ✡ leetcode 156. Binary Tree Upside Down 旋转树 --------- java
156. Binary Tree Upside Down Add to List QuestionEditorial Solution My Submissions Total Accepted: ...
- [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 ...
- 156. Binary Tree Upside Down
题目: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node ...
- 【LeetCode】156. Binary Tree Upside Down 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址:https://leet ...
- [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 ...
- [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 ...
- [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 ...
- [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 ...
随机推荐
- 戴尔R710服务器安装系统——配置raid
一,内存二,硬盘(分区,数据量大小)三,电源线,网络线四,raid(raid0,raid1,raid5) 从这里开始 1.进入系统时不用管,默认进入即可 2.在读完内存消息之后,开始读取磁盘消息,在出 ...
- 基于redis的 分布式锁 Java实现
package com.hs.services.lock; import java.util.concurrent.TimeUnit; import javax.annotation.Resource ...
- [C#]时间格式和字符串的相互转换
一.字符串转化为时间格式 string date = "2018/9/27 10:53:56"; DateTime dt1 = DateTime.Parse(date);//方式1 ...
- 【转】Entity Framework 复杂类型
为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string CompanyN ...
- c语言fork 多进程
fork函数的作用 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两 ...
- MySQL 批量添加
自己封装的一个批量添加. $data 是一个二维数组.key对应是数据表的字段名: /** * 批量创建 * @param array $data * @return int $res 影响行 * @ ...
- windwos下基于exp的提权
00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...
- KMS服务器激活WIN方法
KMS激活的过程简单说就是:欲激活的电脑向KMS服务器请求,KMS服务器做出回应同意激活. KMS激活软件是将KMS服务器用一段代码来模拟,做成一个可执行的程序(即所谓的KMS伺服器).KMS激活软件 ...
- Includes() vs indexOf() in JavaScript
碰到一个问题, 部分机器网页数据源不正常, 简单排查发现是使用了较新的Array.includs 方法. 查了下兼容性, chrome 需要47版本以后支持, 客户机果然是很久的43版本. 用Arra ...
- MyElipse10添加Git
1.下载对应MyEclipse的egit,教程用的是22.2的 http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_ ...