簡體   English   中英

在時間和空間復雜度方面,以下哪種方法可以更好地鏡像樹

[英]which of these methods to mirror a tree is better in terms of time and space-complexity

我在下面編寫了兩種方法來鏡像Java中的樹,這兩種方法都可以正常工作。 我剛剛學習了時間復雜性,並且想知道哪種方法在它們的時間復雜性和空間復雜性方面效果更好。 我做自己的第一種方法,第二種方法是我的老師給我的。 兩種方法之間的主要區別在於,在第一種方法中,沒有創建新樹,而在第二種方法中創建了新樹。 提前致謝!

//way 1
public static TreeNode mirrorImage (TreeNode t) {

    if (t == null)
        return null;

    TreeNode right = t.getRight();
    TreeNode left = t.getLeft();

    t.setLeft(mirrorImage(right));
    t.setRight(mirrorImage(left));

    return t;

}

//way 2
public static TreeNode mirrorImage (TreeNode t) {

    if (t == null)
        return null;
    else
        return new TreeNode (t.getValue(), mirrorImage(t.getRight()), 
           mirrorImage(t.getLeft()));
}

這也是treeNode類,對您也有幫助:)

class TreeNode {

    private Object value; 
    private TreeNode left, right;

    public TreeNode(Object initValue) { 
        value = initValue; 
        left = null; 
        right = null; 
    }

    public TreeNode(Object initValue, TreeNode initLeft, TreeNode initRight) { 
        value = initValue; 
        left = initLeft; 
        right = initRight; 
    }

    public Object getValue() { 
        return value; 
    }

    public TreeNode getLeft()  { 
        return left; 
    }

    public TreeNode getRight()  { 
        return right; 
    }

    public void setValue(Object theNewValue)  { 
        value = theNewValue; 
    }

    public void setLeft(TreeNode theNewLeft)  { 
        left = theNewLeft;
    }

    public void setRight(TreeNode theNewRight) { 
        right = theNewRight;
    }
}

時間復雜度沒有差異。 其中n是TreeNodes的數量,兩種情況下的時間復雜度均為O(n) 您正在訪問每個TreeNode一次。

假設原始樹已經存在,則方法1具有空間復雜度O(1) ,方法2具有空間復雜度O(n) 如果將原始樹的構造算作算法的一部分,則兩種情況下的空間復雜度均為O(n) ,因為O(2n) == O(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM