Binary tree 使用递归获取二叉树的左叶之和

Binary tree 使用递归获取二叉树的左叶之和,binary-tree,tree-traversal,Binary Tree,Tree Traversal,我有以下代码,但此代码中似乎存在问题: private boolean isLeaf(TreeNode node) { if (node == null) return false; if (node.left == null && node.right == null) return true; return false; } public int sumOfLeftLeaves(TreeNode root) {

我有以下代码,但此代码中似乎存在问题:

private boolean isLeaf(TreeNode node) {
    if (node == null)
        return false;
    if (node.left == null && node.right == null)
        return true;
    return false;
}

public int sumOfLeftLeaves(TreeNode root) {
    if (root == null)
        return 0;
    if (isLeaf(root.left))
        return root.left.val;
    return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}
对于输入
[3,9,20,null,null,15,7,2,null,null,null,3,2,null,null,null,null,3]
我使用上面的代码得到
9
,但答案应该是
12
,即
9+3

这个代码缺少什么

输入数组表示一个二叉树,其中如果父级位于位置
i
,则其左级子级位于
2*i+1
,右级子级位于
2*i+2
第一个问题:

[3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
3是根,它有9和20个孩子。 9没有孩子,20有15和7。 这两个人属于哪里

以下是Ruby中的树:

Node (0) : 3
    Node (2) : 20
        Node (6) : 7
            Node (14) : nil
            Node (13) : nil
        Node (5) : 15
            Node (12) : 2
            Node (11) : 3
    Node (1) : 9
        Node (4) : nil
            Node (10) : nil
            Node (9) : nil
        Node (3) : nil
            Node (8) : nil
            Node (7) : 2
                Node (16) : 3
                Node (15) : nil
第二个问题:

[3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
节点可以在左侧有叶,但在右侧有分支:

public int sumOfLeftLeaves(TreeNode root) {
    if (root == null)
        return 0;
    if (isLeaf(root.left))
        return root.left.val+sumOfLeftLeaves(root.right);
    return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}
第一个问题:

[3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
3是根,它有9和20个孩子。 9没有孩子,20有15和7。 这两个人属于哪里

以下是Ruby中的树:

Node (0) : 3
    Node (2) : 20
        Node (6) : 7
            Node (14) : nil
            Node (13) : nil
        Node (5) : 15
            Node (12) : 2
            Node (11) : 3
    Node (1) : 9
        Node (4) : nil
            Node (10) : nil
            Node (9) : nil
        Node (3) : nil
            Node (8) : nil
            Node (7) : 2
                Node (16) : 3
                Node (15) : nil
第二个问题:

[3, 9, 20, null, null, 15, 7, 2, null, null, null, 3, 2, null, null, null, 3]
节点可以在左侧有叶,但在右侧有分支:

public int sumOfLeftLeaves(TreeNode root) {
    if (root == null)
        return 0;
    if (isLeaf(root.left))
        return root.left.val+sumOfLeftLeaves(root.right);
    return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}

维护一个实际添加节点值的sum变量

    if(!root)
        return 0;
    
    if(root->left && root->left->left == NULL && root->left->right == NULL) //checking for leaf
        sum += root->left->val;
    
    sum += (sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right));
    return sum;

维护一个实际添加节点值的sum变量

    if(!root)
        return 0;
    
    if(root->left && root->left->left == NULL && root->left->right == NULL) //checking for leaf
        sum += root->left->val;
    
    sum += (sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right));
    return sum;

SumofLeftLeves()中似乎没有添加根值。如何构建树?您的预期总和似乎不正确,并且输入数据中可能存在异常,其中至少有一个节点似乎是孤立节点(位置7中的
2
在位置3中有父节点
null
)。似乎在SumofLeftLeves()中没有添加根值。您如何构建树?您的预期总和似乎不正确,然后输入数据中可能存在异常,其中至少有一个节点似乎是孤立节点(位置7中的
2
在位置3中有父节点
null
)。