题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

解析:该非递归法有点傻傻的,思想是利用队列进行层次遍历。然后翻转该二叉树,再层次遍历该二叉树,最后对比 两棵树的节点值是否一样的,一样的则是对称的,不一样的就不对称了。

import java.util.*;
/*
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}
*/
public class Solution {//二叉树镜像public  void reverseTree(TreeNode root){if(root==null){return ;}if(root.left!=null){reverseTree(root.left);}if(root.right!=null){reverseTree(root.right);}TreeNode temp=root.left;root.left=root.right;root.right=temp;}boolean isSymmetrical(TreeNode pRoot){if(pRoot==null){return true;}//队列1存储TreeNode temp1;Queue<TreeNode> queue1 = new LinkedList<>();queue1.add(pRoot);List<Integer> list1 =new ArrayList<>();while(!queue1.isEmpty()){temp1=queue1.poll();list1.add(temp1.val);if(temp1.left!=null){queue1.add(temp1.left);}if(temp1.left==null){list1.add(-1);//左孩子为空,添加-1标识}if(temp1.right!=null){queue1.add(temp1.right);}if(temp1.right==null){list1.add(-2);//右孩子为空,添加-2标识}}reverseTree(pRoot);//队列2存储TreeNode temp2;Queue<TreeNode> queue2 = new LinkedList<>();queue2.add(pRoot);List<Integer> list2 =new ArrayList<>();while(!queue2.isEmpty()){temp2=queue2.poll();list2.add(temp2.val);if(temp2.left!=null){queue2.add(temp2.left);}if(temp2.left==null){list2.add(-1);}if(temp2.right!=null){queue2.add(temp2.right);}if(temp2.right==null){list2.add(-2);}}if(list1.equals(list2)){//比较两颗树的节点是否一样的return true;}else{return false;}}
}

《剑指offer》非递归法判定二叉树是否是对称的相关推荐

  1. 【递归】剑指offer——面试题19:二叉树的镜像

    剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...

  2. 剑指offer——面试题58:二叉树的下一个结点

    剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...

  3. 剑指offer——面试题39:二叉树的深度

    剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...

  4. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径

    剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...

  5. 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)

    摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...

  6. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 1 package com.xsf.Sor ...

  7. 剑指offer第7题 重建二叉树

    前言 该系列文章为本人刷leetcode的记录,主要旨在分享刷题的思路及算法解析(尽可能的一题多解),另方便自己日后查阅回顾.代码的实现语言是python和go. 想进大厂免不了刷题,一起加油吧,小伙 ...

  8. 剑指offer(C++)-JZ7:重建二叉树(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点. ...

  9. 剑指offer面试题55 - I. 二叉树的深度(DFS)(递归)

    题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 思路 详见链接 代码 class Solution:def ...

最新文章

  1. 牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力!
  2. vs2019安装C#环境并新建窗体项目
  3. VC++ 保存数据为音频文件(WAV)学习
  4. Nginx Web服务应用
  5. Windows11右下角出现评估副本水印如何去除?
  6. 计算机网络之传输层:5、TCP可靠传输
  7. 超炫酷的HTML5视频播放器 支持手机移动页面
  8. prim算法 最小生成树
  9. Ethernity Chain将发布棒球球星Fernando Tatis Jr.系列NFT
  10. 从scheduler is shutted down看程序员的英文水平
  11. 6-7 使用函数输出水仙花数_Go语言并发如何使用才更加高效
  12. 多标签分类的评价指标
  13. 创业挑战杯获奖作品范例_2017年挑战杯大学生创业大赛优秀作品
  14. oracle导入dmp文件出错,IMP导入时的错误以及解决办法
  15. 动态场景下的语义SLAM的简单实现(基于YOLOv5目标检测)
  16. python 蓝桥杯排序
  17. Golang内存逃逸
  18. android ae动画教程,AE动画转Web代码工具指北-Lottie
  19. STRATASYS 即将收购 ORIGIN,将全新增材制造平台引入聚合物生产领域
  20. R in Action 学习笔记 - 第九章-Analysis of Variance

热门文章

  1. 容器源码分析之PriorityQueue(十)
  2. spark-jar冲突解决方案
  3. 【通俗易懂】C语言中,for循环中i++与++i的区别
  4. python类与函数编程_Python类三种方法,函数传参,类与实例变量(一)详解
  5. shell脚本练习之——形状练习(菱形、直角三角形、等腰三角形、五角星)
  6. python控制电脑关机_Python利用智能音箱语音控制电脑开关机
  7. python自动炒股软件下载_python自动股票交易软件
  8. css如何让滚轮滚动时 不让页面滚动_中国第五届 CSS 大会参会总结
  9. 职业教育计算机课教学反思,关于高职计算机基础课的教学反思.doc
  10. MySQL多元复制_MySQL多源复制解决方案