首页 > 其他 > 详细

剑指 Offer 28. 对称的二叉树

时间:2021-03-16 22:32:17      阅读:36      评论:0      收藏:0      [点我收藏+]

这题和借鉴了27题的思路,创建一个镜像二叉树然后一一比较。
问题在于,27题实现的代码更改的是原树,更改之后原树也变了。
这是关于指针的理解,在创建一个镜像二叉树时,必须确保是真的创建了而不是在原树上更改,因为还要用到原树。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
 //[1,2,2,3,4,4,3]
 //
class Solution {
    TreeNode tmp=null;
    public boolean isSymmetric(TreeNode root) {
       TreeNode B=mirror(root);
       return compare(root,B);
    }
    boolean compare(TreeNode A,TreeNode B){
        if(A==null&&B==null)
            return true;
        
         else if(A!=null&&B!=null)   
            return (A.val==B.val)&&compare(A.left,B.left)&&compare(A.right,B.right);
        else
            return false;   
       
    }
    TreeNode mirror(TreeNode A){//这里实现的很巧妙,借鉴了别人的做法,因为一直不知道怎么把一个引用类型的变量复制过来,java实现这样的复制好像很麻烦。
        if(A==null) return null; 
        TreeNode newRoot=new TreeNode(A.val);   
        newRoot.left=mirror(A.right);
        newRoot.right=mirror(A.left);
      
      return newRoot;

    }
}

体会一下创造镜像二叉树的做法。mirror函数作用是传入一个引用类型的变量,新创建一个与该变量的val相同的引用类型。不能像27题那样用tmp做中间变量实现左右孩子的转换。这种做法要记住,怎么把引用类型A中的引用类型(A的左右孩子)也一并“复制”到新节点newRoot中。

剑指 Offer 28. 对称的二叉树

原文:https://www.cnblogs.com/wsshub/p/14545115.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!