[leetcode]解决Symmetric Tree的一点小心得

来源:互联网 发布:ubuntu16.04 网络映射 编辑:程序博客网 时间:2024/06/05 18:51

本次选择的题目是

Given a binary tree, check whether it is a mirror of itself (ie,symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1   / \  2   2 / \ / \3  4 4  3

But the following [1,2,2,null,3,null,3] is not:

    1   / \       2   2   \   \    3   3

Note: Bonus points if you could solve it both recursively and iteratively.

Solution:
运用递归的方法:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public boolean isSymmetric(TreeNode root) {        return root == null || isSymmetricforLandR(root.left, root.right);    }    private bool isSymmetricforLandR(TresNode l, TreeNode r){        if(l == null || r == null){            return l == r;        }        if(l.val != r.val){            return false;        }        return isSymmetricforLandR(l.left, r.right) && isSymmetricforLandR(l.right, r.left);    }}

不用递归:

public boolean isSymmetric(TreeNode root) {    if(root==null)  return true;    Stack<TreeNode> stack = new Stack<TreeNode>();    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.empty()){        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;}