簡體   English   中英

樹遍歷的復雜性以遞歸方式打印所有路徑

[英]Complexity of tree traversal for printing all paths recursively

如果輸入N我已經編寫了一個程序來查找所有有效的參數組合。 應該有N個參數。 例如,如果N = 2 ,則答案將為()(), (()) ,如果N = 3則答案將為((())), (())(), ()(()), ()()(), (()())

我已經使用Java中的二叉樹實現了該解決方案。 這是我的解決方案。

class Node {
    char value;
    Node right;
    Node left;

    public Node(char value) {
        this.value = value;
    }

    public void insertRight(char value) {
        Node node = new Node(value);
        this.right = node;
    }

    public void insertLeft(char value) {
        Node node = new Node(value);
        this.left = node;
    }
}

public class App
{
    private static final int N = 3;

    public static void main (String[] args)
    {
        Node tree = new Node('(');

        insertNodes(tree, N - 1, 1);

        printParams("", tree);
    }

    private static void insertNodes(Node currentNode, int remainingOpen, int remainingClose) {
        if (remainingOpen > 0) {
            currentNode.insertLeft('(');
            insertNodes(currentNode.left, remainingOpen - 1, remainingClose + 1);
        }
        if (remainingClose > 0) {
            currentNode.insertRight(')');
            insertNodes(currentNode.right, remainingOpen, remainingClose - 1);
        }
    }

    private static void printParams(String paramStr, Node node) {
        paramStr = paramStr + node.value;
        if (node.left == null && node.right == null) {
            System.out.println(paramStr);
            return;
        } 



        if (node.left != null) 
            printParams(paramStr, node.left);

        if (node.right != null)
            printParams(paramStr, node.right);
    }
}

我想知道此解決方案的復雜性。 創建樹的復雜性是什么,遍歷每條路徑的復雜性是什么?

我知道,每條路徑中將有2 * N節點,並且最多會有2^2N節點。 如果我們從根開始遍歷每條路徑,則復雜度可能為N * 2 ^ 2N 但是,當涉及到遞歸時,我無法想到復雜性。

創建的復雜性由您創建的節點數確定,這很直觀。 遍歷是相同的,因為您只訪問每個節點一次。

在您的情況下,節點數構成加泰羅尼亞語序列: https : //en.wikipedia.org/wiki/Catalan_number

暫無
暫無

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

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