Q59:对称的二叉树

原创 2016年08月28日 17:17:40

public class Q59对称的二叉树 {
   /**
    * 题目:对称的二叉树
    * 题目说明:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它就是对称的。
    * 解题思路:要判断一棵二叉树是不是对称的,要先判断它的左右子树是不是对称的,如果对称则判断左子树的右结点和右子树的左结点是不是对称的,依次类推。
    * 因此可以利用递归来实现。例如二叉树的一种遍历方式为前序遍历(根,左,右)则定义对称的遍历方式为对称前序遍历方式(根,右,左)
    */
   public static void main(String[] args) {
      BinaryTreeNode root = new BinaryTreeNode();
      BinaryTreeNode node1 = new BinaryTreeNode();
      BinaryTreeNode node2 = new BinaryTreeNode();
      BinaryTreeNode node3 = new BinaryTreeNode();
      BinaryTreeNode node4 = new BinaryTreeNode();
      BinaryTreeNode node5 = new BinaryTreeNode();
      BinaryTreeNode node6 = new BinaryTreeNode();
     
      root.leftNode = node1;
      root.rightNode = node2;
     
      node1.leftNode = node3;
      node1.rightNode = node4;
     
      node2.leftNode = node5;
      node2.rightNode = node6;
     
      root.value = 8;
      node1.value = 6;
      node2.value = 6;
      node3.value = 5;
      node4.value = 7;
      node5.value = 7;
      node6.value = 5;
     
      Q59对称的二叉树  test = new Q59对称的二叉树();
      System.out.println(test.isSymmetric(root));
   }
   public static boolean isSymmetric(BinaryTreeNode root){
      return isSymmetrical(root, root);
   }
   public static boolean isSymmetrical(BinaryTreeNode root1,BinaryTreeNode root2){
      if(root1 == null && root2 == null){//当根结点均为空时,二叉树对称
         return true;
      }
      if(root1 == null || root2 == null){//其中有一个为空,则不对称
         return false;
      }
      if(root1.value != root2.value){//两个结点都存在,如果值不同,则不对称
         return false;
      }
     
      return isSymmetrical(root1.leftNode, root2.rightNode) &&
      isSymmetrical(root1.rightNode, root2.leftNode);//递归左右子树进行比较
   }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

剑指offer 面试题59 对称的二叉树

剑指offer 面试题59 对称的二叉树题目: 请实现一个函数,用来判断一颗二叉树是不是对称的。 如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,下图中第一棵二叉树是对称的,另外两棵不是。 ...

剑指offer面试题[59]-对称的二叉树

题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 /* struct TreeNode { int val; ...

剑指offer 59题 【树】对称的二叉树

题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路: 通常有三种不同的二叉树遍历算法,即前序遍历、中序、后序遍历。我们...

《剑指offer》:[59]对称的二叉树

题目;请实现一个函数,用来判断一棵二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么它是对称的。 例如,下面二棵树图(1)就是对称的二叉树,而图(2)(3)就不是的。 分析:我们知道树...
  • gogoky
  • gogoky
  • 2016年06月28日 20:01
  • 1708

剑指offer-面试题59-对称的二叉树

二叉树节点结构的定义: package case59_SymBinaryTree; /** * 二叉树节点结构定义 * * @author WangSai * */ public cl...

【剑指offer】判断是否是对称的二叉树

对于一棵二叉树,如何判断这棵二叉树是否是对称的二叉树? 例如: 从以上的图中我们可以看出,关于根节点左右对称的二叉树就是对称的二叉树,那么在程序中我们需要如何判断呢? 在二叉树的先序...

《剑指offer》——对称的二叉树

定义法 递归法T: 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 定义法这道题目,竟然没有想出来如何用递归做,...

判断二叉树是否是水平对称的 Symmetric Tree

题目源自于Leetcode。 题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric aroun...

对称的二叉树 java实现

题目描述: 请实现一个函数,用来判断一棵二叉树是不是对称的,如果一棵二叉树和他的镜像是一样的,那么它是对称的; 解题思路:首先 理解镜像的概念,进行就是一棵二叉树左右节点反转过后形成的二叉树和原来...

剑指offer 对称的二叉树

题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路:递归做法,设p,q分别为左右子树,p,q的值相等,对称条...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q59:对称的二叉树
举报原因:
原因补充:

(最多只允许输入30个字)