zoukankan      html  css  js  c++  java
  • LeetCode101----对称二叉树

    给定一个二叉树,检查它是否是镜像对称的。

    例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

        1
       / 
      2   2
     /  / 
    3  4 4  3
    

    但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

        1
       / 
      2   2
          
       3    3

    代码如下:
    public class LeetCode101 {
    	public boolean isSymmetric = true;
    
    	public static class TreeNode {
    		int val;
    		TreeNode left;
    		TreeNode right;
    
    		TreeNode(int x) {
    			val = x;
    		}
    	}
    
    	public boolean isSymmetric(TreeNode root) {
    		if (root == null) {
    			return true;
    		}
    		isSymmetric(root.left, root.right);
    		return isSymmetric;
    	}
    
    	public void isSymmetric(TreeNode left, TreeNode right) {
    		if (left == null || right == null) {
    			if (left != right) {
    				isSymmetric = false;
    			}
    			return;
    		}
    		isSymmetric(left.left, right.right);
    		isSymmetric(left.right, right.left);
    		if (left != null && right != null) {
    			if (left.val != right.val) {
    				isSymmetric = false;
    			}
    		}
    	}
    }
    

      非递归代码如下所示:

    public class NonLeetCode101 {
    	public boolean isSymmetric = true;
    
    	public static class TreeNode {
    		int val;
    		TreeNode left;
    		TreeNode right;
    
    		TreeNode(int x) {
    			val = x;
    		}
    	}
    
    	public boolean isSymmetric(TreeNode root) {
    		if (root == null) {
    			return true;
    		}
    		isSymmetric(root.left, root.right);
    		return isSymmetric;
    	}
    
    	public void isSymmetric(TreeNode left, TreeNode right) {
    		if (left == null || right == null) {
    			if (left != right) {
    				isSymmetric = false;
    			}
    			return;
    		}
    		if (left.val != right.val) {
    			isSymmetric = false;
    			return;
    		}
    		Stack<TreeNode> lStack = lStruct(left);
    		Stack<TreeNode> rStack = rStruct(right);
    		if (lStack.size() != rStack.size()) {
    			isSymmetric = false;
    			return;
    		}
    		System.out.println("栈大小:" + lStack.size());
    		while (lStack.size() > 0) {
    			TreeNode n1 = lStack.pop();
    			TreeNode n2 = rStack.pop();
    			if (n1 == null || n2 == null) {
    				if (n1 != n2) {
    					isSymmetric = false;
    					return;
    				}
    			} else if (n1 != null && n2 != null) {
    				if (n1.val != n2.val) {
    					isSymmetric = false;
    					return;
    				}
    			}
    		}
    	}
    
    	private Stack<TreeNode> lStruct(TreeNode root) {
    		Stack<TreeNode> stack = new Stack<>();
    		Stack<TreeNode> reStack = new Stack<>();
    		stack.push(root);
    		while (!stack.isEmpty()) {
    			root = stack.pop();
    			reStack.push(root);
    			if (root != null) {
    				if (root.right != null) {
    					stack.push(root.right);
    				} else if (root.right == null) {
    					stack.push(null);
    				}
    				if (root.left != null) {
    					stack.push(root.left);
    				} else if (root.left == null) {
    					stack.push(null);
    				}
    			}
    		}
    		return reStack;
    	}
    
    	private Stack<TreeNode> rStruct(TreeNode root) {
    		Stack<TreeNode> stack = new Stack<>();
    		Stack<TreeNode> reStack = new Stack<>();
    		stack.push(root);
    		while (!stack.isEmpty()) {
    			root = stack.pop();
    			reStack.push(root);
    			if (root != null) {
    				if (root.left != null) {
    					stack.push(root.left);
    				} else if (root.left == null) {
    					stack.push(null);
    				}
    				if (root.right != null) {
    					stack.push(root.right);
    				} else if (root.right == null) {
    					stack.push(null);
    				}
    			}
    		}
    		return reStack;
    	}
    }
    

     递归代码如下:

    public class LeetCode101 {
    	public boolean isSymmetric = true;
    
    	public static class TreeNode {
    		int val;
    		TreeNode left;
    		TreeNode right;
    
    		TreeNode(int x) {
    			val = x;
    		}
    	}
    
    	public boolean isSymmetric(TreeNode root) {
    		if (root == null) {
    			return true;
    		}
    		isSymmetric(root.left, root.right);
    		return isSymmetric;
    	}
    
    	public void isSymmetric(TreeNode left, TreeNode right) {
    		if (left == null || right == null) {
    			if (left != right) {
    				isSymmetric = false;
    			}
    			return;
    		}
    		isSymmetric(left.left, right.right);
    		isSymmetric(left.right, right.left);
    		if (left != null && right != null) {
    			if (left.val != right.val) {
    				isSymmetric = false;
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    删库跑路技术白皮书
    linux shell文件截取前几行,后几行,中间几行命令
    python 带参数 单步执行 (调试 pdb)
    分区助手专业版 v6.2 如何把win10系统迁移到SSD固态硬盘
    GUPPY 3.1.5 安装
    Java调用其他语言
    python代码中获取python版本号的方法
    f-Strings:Python 3格式字符串的新方法(f字符串)
    Centos 安装 pigz
    #!/usr/bin/env python与#!/usr/bin/python的区别
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/9058397.html
Copyright © 2011-2022 走看看