leedcode做题总结,题目Symmetric Tree 2012/09/23

来源:互联网 发布:龙门镖局不好看知乎 编辑:程序博客网 时间:2024/06/06 03:41

判断二叉树是否对称,用递归和非递归实现:


递归可以从节点朝两个方向同时访问比对

public static boolean isS(TreeNode r1,TreeNode r2){        if(r1==null&&r2==null) return true;        if(r1!=null&&r2!=null){            return isS(r1.left,r2.right)&&isS(r1.right,r2.left)&&r1.val==r2.val;        }        else{            return false;        }    }    public static boolean isSymmetric(TreeNode root) {        if(root==null) return true;        return isS(root.left,root.right);    }

非递归思路也一样,从节点像两个方向同时访问比对,因为对用栈非递归历遍树的代码不是很熟悉,中间改了几次错误,代码比较乱。

public boolean isSymmetric(TreeNode root) {        if(root==null) return true;        Stack<TreeNode> s1 = new Stack<TreeNode>();        Stack<TreeNode> s2 = new Stack<TreeNode>();        //s1.push(root);        //s2.push(root);        TreeNode root2=root;        while (!(root==null&&root2==null)){            s1.push(root);            if(root2==null)return false;            if(root2.val!=root.val)return false;            s2.push(root2);            root = root.left;            root2 = root2.right;            if(root==null&&!s1.isEmpty()){                while(!s1.isEmpty()&&root==null&&!s2.isEmpty()&&root2==null){                    root=s1.pop().right;                    root2=s2.pop().left;                }                if(root2!=null&&root==null)return false;                if(root!=null&&root2==null)return false;                if(!s1.isEmpty()&&s2.isEmpty())return false;                if(!s2.isEmpty()&&s1.isEmpty())return false;                }                    }        return true;    }


0 0
原创粉丝点击