给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
     1
    /  \
  2    2
 / \    / \
3 4  4  3
下面这棵二叉树不对称。
    1
    / \
  2   2
    \    \
    3    3

思路:要判断一颗二叉树是否对称,要判断一下几点,可以用递归来实现:

  • 判断一颗二叉树是不是对称的,等价于判断其左右子树是不是镜像对称的
  • 判断镜对称像即判断对称的位置上的元素是不是相等
  • 两个节点A和B对称等价于: 
    • 这两个节点上存储的值相等
    • 节点A的左子树节点和节点B的右子树上的节点是对称的
    • 节点A的右子树节点和节点A的左子树上的节点是对称的
import java.util.LinkedList;
import java.util.Queue;public class TestTreeSymmertic {public static void main(String[] args) {TreeNode root = new TreeNode(1);TreeNode rleft = new TreeNode(2);TreeNode rleftleft = new TreeNode(3);TreeNode rleftright = new TreeNode(4);TreeNode rright = new TreeNode(2);TreeNode rrightleft = new TreeNode(4);TreeNode rrightright = new TreeNode(3);root.left = rleft;root.right = rright;rleft.left = rleftleft;rleft.right = rleftright;rright.left = rrightleft;rright.right = rrightright;TestTreeSymmertic t = new TestTreeSymmertic();System.out.println(t.isSymmetricIter(root));}/**   迭代方式*   使用队列, 这是把递归程序改写成迭代程序的常用方法,常常利用while循环while(!queue.isEmpty()){// 判断逻辑}return true;*/public boolean isSymmetricIter(TreeNode root) {if(null == root){return true;}Queue<TreeNode> treeNodeQueue = new LinkedList<TreeNode>();treeNodeQueue.offer(root.left);treeNodeQueue.offer(root.right);while(!treeNodeQueue.isEmpty()){TreeNode node1 = treeNodeQueue.poll();TreeNode node2 = treeNodeQueue.poll();if(node1 == null && node2 == null){continue;}if(node1 == null || node2 == null || node1.val != node2.val){return false;}treeNodeQueue.offer(node1.left);treeNodeQueue.offer(node2.right);treeNodeQueue.offer(node1.right);treeNodeQueue.offer(node2.left);}return true;}/*** 递归的方式* @param root TreeNode类* @return bool布尔型*/public boolean isSymmetric (TreeNode root) {// write code hereif(null == root ) {return true;}return isTreeSymmertic(root.left, root.right);}boolean isTreeSymmertic(TreeNode pHead1,TreeNode pHead2){// 如果左右节点都为空,表示对称if(pHead1== null && pHead2==null){return true;}//  其中一个节点为空,不对称if(pHead1==null){return false;}//  其中一个节点为空,不对称if(pHead2==null){return false;}//1.判断当前值左右是否相等,2.判断左子树的左节点和右子树的右节点,3.判断左子树的右节点和右子树的左节点是否相等,三者缺一不可,一直递归return (pHead1.val==pHead2.val && isTreeSymmertic(pHead1.left,pHead2.right) && isTreeSymmertic(pHead1.right,pHead2.left));}}

常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)相关推荐

  1. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  2. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  3. 常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先

    题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点.   假设节点的值都大于0. 比如9,10的最近公共祖先节点是2. 思路: 从根节点开始遍历 ...

  4. 常考数据结构与算法:实现二叉树先序,中序和后序遍历

    题目描述 分别按照二叉树先序,中序和后序打印所有的节点. 输入 {1,2,3} 返回值 [[1,2,3],[2,1,3],[2,3,1]] import java.util.ArrayList;cla ...

  5. 常考数据结构与算法:判断一个链表是否为回文结构

    题目描述 给定一个链表,请判断该链表是否为回文结构. 示例1 输入 [1,2,2,1] 返回值 true 思路: 双指针,快指针一次走两步,慢指针一次走一步,快指针走完,慢指针走到中点.然后将中点开始 ...

  6. 常考数据结构与算法:重建二叉树

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5 ...

  7. 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,

    题目描述 给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径, 例如: 给出如下的二叉树,sum=22, 返回 [ [5,4,11,2], [5,8,9] ] 示 ...

  8. 常考数据结构与算法:二叉树的最大深度

    题目描述 求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量. class TreeNode {int val;TreeNode left;TreeNode righ ...

  9. 常考数据结构与算法:二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \. 6 10 / \ / \. 5 7 9 11 镜像二叉树 8 / \. 10 6 / \ ...

最新文章

  1. android ndk怎样加载o文件_JNI初探之NDK 开发环境配置
  2. Java Web Model2实战
  3. 【字符串系列】字符串匹配中的位并行算法
  4. 【Silverlight】解决DataTemplate绑定附加属性
  5. 在Docker中运行asp.net core 跨平台应用程序
  6. qt linux opensource ,QT opensource embedded linux 编…
  7. java上传ftp_java实现FTP文件上传与文件下载
  8. 阿里巴巴开源离线同步工具 DataX3.0 介绍
  9. Pthon入门--range()函数
  10. 【一天一个C++小知识】011.C++编译的流程
  11. oracle sys_context()函数
  12. JavaScript数据类型、引用类型、操作符、语句
  13. 【题解】codeforces786A Berzerk
  14. seo整站优化详细教程下载
  15. 去百度还是去创新工厂?信开复还是信彦宏?
  16. QPSK解调过程中的抽样判决
  17. 实现微信打开App功能
  18. saas平台架构分为哪几部分
  19. 利用51单片机霍尔水流量传感器开发水流统计水流量报警(LCD1602显示)
  20. 【考研】东北大学二叉树相关算法(2)

热门文章

  1. Ansible基础入门
  2. BZOJ 2456 : mode
  3. Apriori算法介绍(Python实现)
  4. CRM WEB UI 04明细界面添加按钮
  5. tomcat常用的优化和配置
  6. 哲学家就餐问题--信号量和互斥量预防死锁
  7. 清理系统盘遇到的问题
  8. js去掉最右边的逗号
  9. 浅谈Angular网络请求
  10. 百度AI实战营第二季:AI技术商业落地指南