返回包含2个子节点的节点数

时间:2017-12-04 03:05:38

标签: java tree

我正在研究一个方法,它应该返回树中有两个子节点的数字节点。这就是我到目前为止所拥有的......

public int twoChild(TreeNode<Integer> root){
    if (root == null)
        return 0;
    else if (root.left != null && root.right != null)
        int leftTwoChild = twoChild(root.left);
        int rightTwoChild = twoChild(root.right);
        return 1 + leftTwoChild + rightTwoChild;

我认为我没有它,但我可能有正确的想法。如果有人能指导我如何做到这一点我会非常感激!

1 个答案:

答案 0 :(得分:1)

您必须分别测试每个子树。基本情况发生在当前树有两个子节点时,我们将其计为最终结果的一个 - 但无论如何我们必须继续遍历树的其余部分。这就是我的意思:

public int twoChild(TreeNode<Integer> root) {

    // base case: tree is empty
    if (root == null) return 0;

    // base case: tree has both children, or not    
    int count = root.left != null && root.right != null ? 1 : 0;

    // recursive cases: traverse both subtrees, accumulating result
    count += twoChild(root.left);
    count += twoChild(root.right);

    // return result of recurring on both subtrees
    return count;

}