解决问题的思路

  • 工作中遇到的问题可能用到的数据结构由很多,并且各种数据结构都不简单,我们不可能光凭借想象就能得到问题的解法,因此画图是在家具问题过程中用来帮助自己分析,推理的常用手段。很多问题比较抽象,不容易找到解决方案。我们可以借助图形帮助自己观察思考。
  • 很多比较复杂的数据结构相关的问题,例如,二叉树,二维数组,矩阵,链表,图等问题。都可以采用画图的方式来分析。
  • 利用图像来分析更能够直观的找到问题的解决方案,而且有时候在图中也能看出边界条件,我们可以将问题的某一种情况来代替全量,得出边界条件需要满足的值。这样编码会变得更加容易
二叉树的的镜像
  • 题目:完成一个函数,输入一个二叉树,改函数输出他的镜像。

  • 二叉树节点定义还是使用前面二叉树实现原理中的节点定义。

  • 树的镜像这种问题比较新颖,光靠想的话简单情况可以想出来,当未必能一下子得出具体的实现方案。我们可以画出一个镜像图如下:

  • 我们可以从上图中直观的看出镜像前后的变化,镜像前后根节点是不变化的,但是左右子树的位置交换了位置,我们可以一步一步的来话题分析,如下第一步骤。

  • 框中的第一个子树部分的镜像信息,根节点不变,子树左右交换,交换后我们可以用同样的逻辑处理 8-9-2 子树和其他的子树,明显这部分用递归可以实现。

  • 综上分析得出:

    • 我们先前序遍历这颗树的每个节点
    • 如果遍历到的节点有子节点,就交换两个子节点
    • 当交换完所有非叶子节点的左右子节点后,就完成了镜像的输出。
  • 代码实现如下:

/*** 获取二叉树的镜像* @author liaojiamin* @Date:Created in 17:36 2021/3/31*/
public class MirrorBinaryTree {public static BinaryNode mirrorTree(BinaryNode root){if(root == null || (root.getLeft() == null && root.getRight() == null)){return root;}BinaryNode treeTemp = root.getRight();root.setRight(root.getLeft());root.setLeft(treeTemp);if(root.getRight() != null){mirrorTree(root.getRight());}if(root.getLeft() != null){mirrorTree(root.getLeft());}return root;}public static void main(String[] args) {BinaryNode node = new BinaryNode(null, null, null);BinarySearchTree tree1 = new BinarySearchTree();Random random = new Random();for (int i = 0; i < 20; i++) {node = tree1.insert(random.nextInt(100), node);}tree1.printTree(node);System.out.println("----------------------mirror------------");mirrorTree(node);tree1.printTree(node);}
}

上一篇:数据结构与算法–代码鲁棒性案例分析
下一篇:数据结构与算法–解决问题的方法-顺时针打印矩阵

数据结构与算法--解决问题的方法- 二叉树的的镜像相关推荐

  1. 数据结构与算法--解决问题的方法-顺时针打印矩阵

    顺时针打印矩阵 题目输入一个矩阵,按照从外向里顺时针的顺序依次打印每一个数字.例如下案例: 如上图矩阵,顺时针打印:1,2,3,4,8,12,16,15,14,13,9,5,6,7,1,10 以上问题 ...

  2. 《数据结构与算法》——树与二叉树之遍历总结

    <数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...

  3. 数据结构与算法:树与二叉树python实现

    最近复习一遍数据结构与算法,做一些笔记,大家可以一起复习. 一.树的一些容易混淆的定义: 结点层:根结点的层定义为1:根的孩子为第二层结点,依此类推: 树的深度(或高度):树中最大的结点层: 满二叉树 ...

  4. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

  5. 数据结构与算法(1)--二叉树

    博客记录的第一个算法: 实现二叉树数据结构,以及深度优先搜索和广度优先搜索算法(非科班小白,努力中....)  class BT_Node: def __init__(self, data, left ...

  6. LeetCode 【数据结构与算法专栏】【二叉树】

    刷题笔记 二叉树算法专栏 leetcode 814. 二叉树剪枝 leetcode上二叉树的建树测试代码 leetcode 94 二叉树的中序遍历 leetcode 144 二叉树的前序遍历 leet ...

  7. Java数据结构和算法(十)——二叉树

    接下来我们将会介绍另外一种数据结构--树.二叉树是树这种数据结构的一员,后面我们还会介绍红黑树,2-3-4树等数据结构.那么为什么要使用树?它有什么优点? 前面我们介绍数组的数据结构,我们知道对于有序 ...

  8. 数据结构与算法(八)-二叉树(斜二叉树、满二叉树、完全二叉树、线索二叉树)...

    前言:前面了解了树的概念和基本的存储结构类型及树的分类,而在树中应用最广泛的种类是二叉树 一.简介 在树型结构中,如果每个父节点只有两个子节点,那么这样的树被称为二叉树(Binary tree).其中 ...

  9. 《数据结构与算法》实验报告——二叉树的遍历

    <数据结构>实验报告 学号:2018329621200 机房号10-414 姓名: 申屠志刚 日期:2019/11/4 程序名:main.cpp 实验内容: 二叉树的遍历 一.目的和要求( ...

最新文章

  1. Express res.render 学习笔记
  2. bilibili 解析_用 Python 抓取 bilibili 弹幕并分析!
  3. linux18配置静态ip,ubuntu18配置静态IP地址
  4. java 内存泄露 书籍_java虚拟机内存溢出和泄漏实例
  5. oschina git服务, 如何生成并部署ssh key
  6. C++与QML交互(信号与槽通知QML,C++注册QML,QML结点映射C++类)
  7. VM安装ubuntu18.04完成时不能上网,显示cable unplugged
  8. TypeScript 3.4 发布
  9. matlab二进制十进制十六进制和任意进制之间的转换
  10. hmcl整合包导入_我只用了一篇文章就完成了Spring+SpringMVC+MyBatis详细整合教程
  11. mysql 备份表_删库一定要跑路吗?手把手教你MySQL数据恢复
  12. amr转mp3,amr怎么转换mp3?
  13. 百度网盘永久分享链接-注册电气工程师(注电)历年考试真题PDF, Word版资料(含答案), 相关视频资料
  14. 关于消息队列的一些思考
  15. 动作捕捉系统用于机器人关节位移与几何参数标定
  16. VIC Image 驱动程序
  17. 使用爱码哥之后的心得
  18. React里里面试准备
  19. 索引(从零开始)必须大于或等于零,且小于参数列表的大小.
  20. Gitee崩了?大量仓库被关闭,官方答复“迫于无奈”

热门文章

  1. C和指针之函数之求最大公约数
  2. Android 之PackageManager框架
  3. Android之switch控件的用法
  4. java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...
  5. 中科院超牛的物理学家,摇滚界无人不知的“李白”,你一定听过他的歌!
  6. 为什么盯一个字看久了,反而感觉不认识了?
  7. 我的电脑不联网,很安全!黑客:你还有风扇呢
  8. 有计算机信号专业吗,计算机医学图像及信号处理
  9. 电影特效用到什么计算机知识,后期影视特效处理知识普及
  10. 单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码