zoukankan      html  css  js  c++  java
  • Symmetric Tree

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

    For example, this binary tree is symmetric:

        1
       / 
      2   2
     /  / 
    3  4 4  3
    

    But the following is not:

        1
       / 
      2   2
          
       3    3
    

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

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public class Node{
            public int val;
            public int pos;
            public Node(int val,int pos){
                this.val=val;
                this.pos=pos;
            }
        }
       public boolean isSymmetric(TreeNode root) {
            if(root==null) return true;
            else{
                ArrayList<Node> list=new ArrayList<Node>();
                copyBST(root,list,0);
                if(isSym(list)) return true;
                else return false;
            }
        }
        public boolean isSym(List<Node> list){
        	int n=list.size();
            for(int i=0;i<n/2;i++){
            	if(list.get(i).val!=list.get(n-i-1).val || (list.get(i).val==list.get(n-i-1).val && list.get(i).pos==list.get(n-i-1).pos )) return false;
            }
            return true;
        }
        public void copyBST(TreeNode root,List<Node> list,int pos){
            if(root==null) return;
            copyBST(root.left,list,1);
            Node node=new Node(root.val,pos);
            list.add(node);
            copyBST(root.right,list,2);
        }
    }

    这个解法感觉有问题的,但竟然ac了,留作记录,以下是正确的递归解法。

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        
       public boolean isSymmetric(TreeNode root) {
            if(root==null) return true;
            return isSym(root.left,root.right);
        }
        public boolean isSym(TreeNode left,TreeNode right){
        	if(left==null && right==null) return true;
        	if(left!=null && right==null) return false;
        	if(left==null && right!=null) return false;
        	if(left.val!=right.val) return false;
        	else return isSym(left.right,right.left)&&isSym(left.left,right.right);
        }
        
    }


  • 相关阅读:
    基于java容器注解---基于泛型的自动装配
    mininet+floodlight搭建sdn环境并创建简单topo
    Bean装配之@Autowired注解
    Linux常用命令
    Bean利用Resource接口获取资源的几种方式
    MYSQL分页优化查询
    MYSQL统计和识别重复值
    MYSQL统计和识别重复值
    MYSQL处理数据重复值
    MYSQL处理数据重复值
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6725122.html
Copyright © 2011-2022 走看看