Set left node count

Given a binary tree, count the number of nodes in each node’s left subtree, and store it in the numNodesLeft field.

Examples

1(6)

/ \

2(3) 3(0)

/ \

4(1) 5(0)

/ \ \

6(0) 7(0) 8(0)

The numNodesLeft is shown in parentheses.

Solution: sinking check, backtracking

Base Case: if root is null, return 0;

Recursive call:

From children: get left and right count

For self: pass up left + right count + 1

/**
 * public class TreeNodeLeft {
 *   public int key;
 *   public TreeNodeLeft left;
 *   public TreeNodeLeft right;
 *   public int numNodesLeft;
 *   public TreeNodeLeft(int key) {
 *     this.key = key;
 *   }
 * }
 */

public class Solution {
  public void numNodesLeft(TreeNodeLeft root) {
    numLeft(root);
  }

  public int numLeft(TreeNodeLeft root){
    if (root == null) return 0;
    int leftCount = numLeft(root.left);
    int rightCount = numLeft(root.right);
    root.numNodesLeft = leftCount;
    return leftCount + rightCount + 1;
  }
}

Time Complexity: O(2^N) two recursive calls per node

Space Complexity: O(Height) recursive call stack

Last updated

Was this helpful?