226. 翻转二叉树

翻转一棵二叉树。

示例:

输入:

     4
/ \
2 7
/ \ / \
1 3 6 9

输出:

     4
/ \
7 2
/ \ / \
9 6 3 1

备注:

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

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

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
// 先序遍历--从顶向下交换
// public TreeNode invertTree(TreeNode root) {
// if (root == null) return null;
// // 保存右子树
// TreeNode rightTree = root.right;
// // 交换左右子树的位置
// root.right = invertTree(root.left);
// root.left = invertTree(rightTree);
// return root;
// } //中序遍历
// public TreeNode invertTree(TreeNode root) {
// if (root == null) return null;
// invertTree(root.left); // 递归找到左节点
// TreeNode rightNode= root.right; // 保存右节点
// root.right = root.left;
// root.left = rightNode;
// // 递归找到右节点 继续交换 : 因为此时左右节点已经交换了,所以此时的右节点为root.left
// invertTree(root.left);
// } //后序遍历
// public TreeNode invertTree(TreeNode root) {
// // 后序遍历-- 从下向上交换
// if (root == null) return null;
// TreeNode leftNode = invertTree(root.left);
// TreeNode rightNode = invertTree(root.right);
// root.right = leftNode;
// root.left = rightNode;
// return root;
// } //层次遍历
public TreeNode invertTree(TreeNode root) {
// 层次遍历--直接左右交换即可
if (root == null) return null;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
TreeNode node = queue.poll();
TreeNode rightTree = node.right;
node.right = node.left;
node.left = rightTree;
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
}
return root;
} }

最新文章

  1. 解读SDN的东西、南北向接口
  2. [转] 多进程下数据库环境的恢复:DB_REGISTER
  3. SQL补充
  4. SQL中行列转换Pivot
  5. Julia中文教程资源.txt
  6. HTML5新增结构标签
  7. The content of element type &quot;beans&quot; must match &quot;(description?,(import|alias|bean)*)
  8. WWDC2014之iOS使用动态库
  9. eclipse 比较好的插件
  10. jquery 中 (function( window, undefined ) {})(window)写法详解(转)
  11. 网站静态化处理—web前端优化—中(12)
  12. Ubuntu系统上安装搜狗拼音输入法sogou
  13. 重载Cocos2D生存期的方法
  14. Android hybrid App项目构建和部分基本开发问题
  15. UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character &#39;\xbb&#39; in position 30633: illegal multibyte sequence
  16. lanya
  17. scala flatmap、reduceByKey、groupByKey
  18. 蓝牙协议分析(11)_BLE安全机制之SM
  19. [100]awk运算-解决企业统计pv/ip问题
  20. 查看Andorid应用是32位还是64位

热门文章

  1. HDU 2005 (水)
  2. 关于tez-ui的&quot;All DAGs&quot;和&quot;Hive Queries&quot;页面信息为空的问题解决过程
  3. Linux基本命令(文件基操)
  4. Java注解的定义和使用
  5. 流复制-pg_start_backup(带自定义表空间)
  6. mysql 查询获取排名的方法(绝对有效)
  7. 欧拉函数 BZOJ2705
  8. #442-Find All Duplicates in an Array-数组中重复的数字
  9. 阿里云ECS封25端口导致wordpress无法发送邮件的解决
  10. JavaScript中foreach、map、filter、find、every、some的用法