问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4080 访问。

翻转一棵二叉树。

输入:

4

   /   \

  2     7

 / \   / \

1   3 6   9

输出:

4

   /   \

  7     2

 / \   / \

9   6 3   1

备注:这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。


Invert a binary tree.

Input:

4

   /   \

  2     7

 / \   / \

1   3 6   9

Output:

4

   /   \

  7     2

 / \   / \

9   6 3   1

Trivia:This problem was inspired by this original tweet by Max Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f*** off.


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4080 访问。

public class Program {

    public static void Main(string[] args) {
var root = new TreeNode(1) {
left = new TreeNode(3) {
left = new TreeNode(5),
right = new TreeNode(7)
},
right = new TreeNode(9)
}; var res = InvertTree(root);
ShowTree(res); Console.WriteLine(); root = new TreeNode(2) {
left = new TreeNode(4) {
left = new TreeNode(6)
},
right = new TreeNode(8)
}; res = InvertTree2(root);
ShowTree(res); Console.ReadKey();
} public static void ShowTree(TreeNode node) {
if(node == null) {
Console.Write("null ");
return;
}
Console.Write($"{node.val} ");
ShowTree(node.left);
ShowTree(node.right);
} public static TreeNode InvertTree(TreeNode root) {
PreOrder(root);
return root;
} public static void PreOrder(TreeNode root) {
if(root == null) return;
var swap = root.left;
root.left = root.right;
root.right = swap;
PreOrder(root?.left);
PreOrder(root?.right);
} public static TreeNode InvertTree2(TreeNode root) {
if(root == null) return null;
var swap = root.left;
root.left = InvertTree2(root.right);
root.right = InvertTree2(swap);
return root;
} public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) { val = x; }
} }

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4080 访问。

1 9 null null 3 7 null null 5 null null
2 8 null null 4 null 6 null null

分析:

显而易见,以上2种算法的时间复杂度均为:  。

最新文章

  1. 布里斯班Twilight Bay Run半程马拉松
  2. Hadoop学习日志- install hadoop
  3. 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind
  4. 开发漫谈:千万别说你不了解Docker!
  5. 学C日志
  6. 十九、mysql 数据分布式
  7. bootstrap--- 两种bootstrap multiselect组件大比拼
  8. python基础===随机打印txt文件中的某一行
  9. java基础进阶一:String源码和String常量池
  10. [转] Ramda 函数库参考教程
  11. Windows Vue 安装
  12. javascript数据基本类型和引用数据类型区别
  13. 泡泡堂BNB[ZJOI2008]
  14. :after和:before 伪类
  15. Hadoop2源码分析-YARN RPC 示例介绍
  16. laravel中类似于thinkPHP中trace功能
  17. HDU 1308 What Day Is It?(模拟题)
  18. 1391: [Ceoi2008]order
  19. es6 入坑笔记(一)---let,const,解构,字符串模板
  20. struct模块-黏包的解决方法

热门文章

  1. Java匿名对象介绍
  2. split().reverse().join()代码解析
  3. NIO实践-HTTP交互实现暨简版Tomcat交互内核
  4. Spring IoC深入理解
  5. 设计模式:proxy模式
  6. 借鉴一个比较标准的后端RESTful API
  7. 多个activity的博客参考,用mainactivity 调用 明天阅读一下
  8. 企业权限管理(SSM整合)(总结)
  9. statsmodels 示例
  10. 设置x 轴斜体(每次我都百度,这次单独为它发一个)