【问题标题】:Count total number of edges in binary tree计算二叉树中边的总数
【发布时间】:2016-06-07 00:35:10
【问题描述】:

我需要编写一种方法来计算二叉树中边的总数。我正在尝试递归,因为它可以根据节点数计算 - 1,但不确定如何在递归结束时减去一个。因此,我试图更新一个变量“count”并在最后减去一个。我想知道这是否是最好的方法,或者我是否应该尝试另一种方法。

public int numOfEdges(Node v){
    int count;  
    if(isLeaf(v){  
        count = 0; 
    }  
    else{  
        count = 1 + numOfEdges(left(v)) + numOfEdges(right(v));  
    }  
    return count - 1;  
}

【问题讨论】:

  • 您是否要求它在一个方法中,或者您是否可以创建另一个名为 numOfNodes 的方法并减去一个?
  • “边缘”是指路径还是树叶?
  • 递归没问题。使用 numOfNodes - 1 也可以。但是如果你使用直接递归,你应该测试 left ++1?right ++1?。因为那是边缘。
  • “边缘”是指路径,而不是叶子
  • 为什么不直接写两个函数,一个计算节点数,一个计算节点数并减去一个?

标签: java recursion tree binary-tree binary-search-tree


【解决方案1】:

我认为这可能是最容易实现的,只需编写两种不同的方法,这是使用递归时的常用技术:

private int numNodesIn(Node v) {
    if (v == null) return 0;
    return 1 + numNodesIn(v.left) + numNodesIn(v.right);
}

public int numEdgesIn(Node v) {
    return v == null? 0 : numNodesIn(v) - 1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多