对称的二叉树 java实现

来源:互联网 发布:gtx1050ti 知乎 编辑:程序博客网 时间:2024/05/21 08:48

题目描述:

请实现一个函数,用来判断一棵二叉树是不是对称的,如果一棵二叉树和他的镜像是一样的,那么它是对称的;

解题思路:首先 理解镜像的概念,进行就是一棵二叉树左右节点反转过后形成的二叉树和原来的二叉树是一样的。这道题目中判断条件是使用和元二叉树的镜像相同,那么最low的方法是对原二叉树进行重构,重构后的二叉树和原二叉树进行比较,相同即是对称,不同就是不对称喽。那么这种方法需要额外空间的,我觉得不是很好。下面来说说我的想法:其实判断镜像的过程可以简化成这样:看下面的图,原来的二叉树是左边的图,其镜像二叉树就是右边的图,可以看出就是对左右两个字数进行的翻转,那么判断一棵二叉树是否对称就变成了,将原二叉树用两个变量引用,比如说root1,root2,先判断这两棵树的根节点是否相同,不相同肯定不是对称的,相同的话继续比较,root1的左子树和root2的右子树以及root1的右子树和root2的左子树,具体代码如下:



public class Solution {    boolean isSymmetrical(TreeNode pRoot)    {        return getResult(pRoot,pRoot);    }    boolean getResult(TreeNode pRoot,TreeNode Root) {        if (pRoot == null && Root == null) return true;        if (pRoot == null || Root == null) return false;        if(pRoot.val != Root.val) {            return false;        }        return (getResult(pRoot.left,Root.right)&&getResult(pRoot.right,Root.left));    }}