101. Symmetric Tree

一、题目

  1、审题

  2、分析

    给出一棵二叉树,判断其是否对称。

 

二、解答

  1、思路:

    方法一、

      每次递归判断根节点的左孩子与根节点的右孩子是否相等。

  

public boolean isSymmetric(TreeNode root) {
        if(root == null)
            return true;
        return isSymmetric(root.left, root.right);
    }

    
    private boolean isSymmetric(TreeNode left, TreeNode right) {
        
        if(left == null && right == null)
            return true;
        if(left == null || right == null)
            return false;
        
        return left.val == right.val && (isSymmetric(left.right, right.left))
                                     && (isSymmetric(left.left, right.right));
    }

  

  方法二、

    新建一个栈空间,根节点的左孩子与根节点的右孩子同时入栈,出栈时出两个栈顶元素,判断其值是否相等。

    若相等,在入根左孩子的左孩子与根右孩子的右孩子,在入栈根左孩子的右孩子与根右孩子的左孩子。

    若栈不为空,再出两个栈顶元素进行判断。

 public boolean isSymmetric(TreeNode root) {
        if(root == null)
            return true;
        
        Stack<TreeNode> stack = new Stack<>();
        TreeNode left, right;
        
        if(root.left != null) {
            if(root.right == null)
                return false;
            stack.push(root.left);
            stack.push(root.right);
        }
        else if(root.right != null)
            return false;
        
        while(!stack.isEmpty()) {
            if(stack.size() % 2 != 0)
                return false;
            
            right = stack.pop();
            left = stack.pop();
            if(right.val != left.val)
                return false;
            
            if(left.left != null) {
                if(right.right == null)
                    return false;
                stack.push(left.left);
                stack.push(right.right);
            }
            else if(right.right != null)
                return false;
            
            if(left.right != null) {
                if(right.left == null)
                    return false;
                stack.push(left.right);
                stack.push(right.left);
            }
            else if(right.left != null)
                return false;
        }
        
        return true;
    }

 

posted @ 2018-09-28 14:30  skillking2  阅读(124)  评论(0编辑  收藏  举报