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

来源:互联网 发布:java sha1解密 编辑:程序博客网 时间:2024/06/15 17:26

题目描述

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


思路:

通常有三种不同的二叉树遍历算法,即前序遍历、中序、后序遍历。我们是否可以定义一种遍历算法,先遍历右子结点再遍历左子结点。

例如{8,6,5,7,6,7,5} ,第一次前序遍历:{8,6,5,7,6,7,5},第二次新的遍历算法:{8,6,5,7,6,7,5},可见这俩个序列是一样的。

特殊测试用例:{7,7,7,7,7,7} 俩种遍历方式一样,但不是对称的,因此将NULL值加入链表来判断。


书中做法:推荐,写的很漂亮

boolean isSymmetrical(TreeNode pRoot){return isSymmetrical(pRoot,pRoot);}boolean isSymmetrical(TreeNode node1,TreeNode node2){if(node1 == null && node2 == null)return true;if(node1 == null || node2 == null)return false;if(node1.val != node2.val)return false;return isSymmetrical(node1.left,node2.right) && isSymmetrical(node1.right,node2.left);}


我的做法:
public class Title59 {boolean isSymmetrical(TreeNode pRoot)    {           List<String> listOne = new ArrayList<String>();          List<String> listTwo = new ArrayList<String>();          getPre(pRoot,listOne);           getReversePre(pRoot,listTwo);                  for(int i=0;i<listOne.size();i++){        if(! listOne.get(i).equals(listTwo.get(i)))        return false;          }          return true;    }void getPre(TreeNode node,List<String> ret){if(node == null){ret.add("null");return ;}ret.add(String.valueOf(node.val));getPre(node.left,ret);getPre(node.right,ret);}void getReversePre(TreeNode node,List<String> ret){if(node == null){ret.add("null");return ;}ret.add(String.valueOf(node.val));getReversePre(node.right,ret);getReversePre(node.left,ret);}public static void main(String[] args) {TreeNode a = new TreeNode(8);TreeNode b = new TreeNode(6);TreeNode c = new TreeNode(6);TreeNode d = new TreeNode(5);TreeNode e = new TreeNode(7);TreeNode f = new TreeNode(7);TreeNode g = new TreeNode(5);a.left = b;a.right = c;b.left = d;b.right = e;c.left = f;c.right = g;Title59 clazz = new Title59();System.out.println(clazz.isSymmetrical(a));a = new TreeNode(7);b = new TreeNode(7);c = new TreeNode(7);d = new TreeNode(7);e = new TreeNode(7);f = new TreeNode(7);a.left = b;a.right = c;b.left = d;b.right = e;c.left = f;System.out.println(clazz.isSymmetrical(a));}}


0 0
原创粉丝点击