判斷一棵樹是否對稱,如果對稱,中序遍歷的結果一定也是對稱的。
public boolean isSymmetric(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function if(root == null) return true; ArrayList<Integer> ret = new ArrayList<Integer>(); inorder(root, ret); for(int i=0, j=ret.size()-1; i<j; i++, j--){ if(ret.get(i) != ret.get(j)) return false; } return true; } public void inorder(TreeNode root, ArrayList<Integer> ret){ if(root == null) return; if(root.left!=null) inorder(root.left, ret); ret.add(root.val); if(root.right!=null) inorder(root.right, ret); }
看了一下別人的代碼,也可以在遞歸的過程中直接去判斷。
public boolean isSymmetric(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function if(root== null) return true; return ifSymmetric(root.left, root.right); } public boolean ifSymmetric(TreeNode tree1, TreeNode tree2){ if(tree1==null && tree2==null) return true; else if(tree1 == null || tree2 == null) return false; if(tree1.val != tree2.val) return false; else return (ifSymmetric(tree1.left, tree2.right) && ifSymmetric(tree1.right, tree2.left)); }