簡體   English   中英

遞歸計算二叉樹中的內部節點(父節點)

[英]Counting the inner nodes (parent nodes) in a binary tree recursively

我需要創建一個以二進制搜索樹的根節點為參數的遞歸方法。 然后,此遞歸方法將返回整個二進制搜索樹中內部節點總數的int值。

這是我到目前為止的內容:

int countNrOfInnerNodes (Node node) {
    if(node == null) {
       return 0;
    }
    if (node.left != null && node.right != null){
       return 1;
    }
    return countNrOfInnerNodes(node.left)+countNrOfInnerNodes(node.right)
    }
 }

有沒有更好的辦法? 我還堅持尋找iterativ解決方案。

這是固定的遞歸方法:

int countNrOfInnerNodes (Node node) {
    if(node == null) {
       return 0;
    }

    if (node.left == null && node.right == null) {
       // not an inner node !
       return 0;
    } else {
       // the number of inner nodes in the left sub-tree + the number of inner
       // nodes in the right sub-tree, plus 1 for this inner node
       return countNrOfInnerNodes(node.left) + countNrOfInnerNodes(node.right) + 1;
    }
}

這是迭代方法:

int countNrOfInnerNodes(Node node) {
    if (node == null)
        return 0;

    Stack<Node> nodesToCheck = new Stack<Node>();

    nodesToCheck.push(node);
    int count = 0;

    while (!nodesToCheck.isEmpty()) {
        Node checkedNode = nodesToCheck.pop();
        boolean isInnerNode = false;

        if (node.left != null) {
            isInnerNode = true;
            nodesToCheck.push(node.left);
        }

        if (node.right != null) {
            isInnerNode = true;
            nodesToCheck.push(node.right);
        }

        if (isInnerNode)
            count++;
    }

    return count;
}

暫無
暫無

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

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