我正在研究一个方法,它应该返回树中有两个子节点的数字节点。这就是我到目前为止所拥有的......
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;
我认为我没有它,但我可能有正确的想法。如果有人能指导我如何做到这一点我会非常感激!
答案 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;
}