leetcode: Symmetric Tree


判斷一棵樹是否對稱,如果對稱,中序遍歷的結果一定也是對稱的。

    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));
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM