Определите количество узлов в двоичном дереве на основе количества их дочерних элементов - PullRequest
0 голосов
/ 26 мая 2020

Вам дается узел root двоичного дерева T . Мы различаем guish между тремя типами узлов в T : узлы с 0 дочерними элементами (т.е. листья), узлы с 1 дочерним элементом и узлы с двумя дочерними элементами. Определите для каждого типа общее количество узлов в T . Верните свой результат в виде целочисленного массива длиной 3.

На выходе должен быть массив, содержащий количество всех типов узлов, как указано выше.

Это то, что у меня есть, но это не проходит тест моего инструктора, когда я его запускаю:

private static int[] problem1(Node root){

     int[] nodeCount = new int[]{0,0,0};

     // BASE CASE
     if (root == null) {

        // Implement me!
        return new int[] {
           -1, // nodes with 0 children
           -1, // nodes with 1 child
           -1  // nodes with 2 children
        };

     }

     // RECURSIVE CALL
     int[] leftChild = problem1(root.left);
     int[] rightChild = problem1(root.right);

     nodeCount[0] = leftChild[0] + rightChild[0];
     nodeCount[1] = leftChild[1] + rightChild[1];
     nodeCount[2] = leftChild[2] + rightChild[2];

     if(root.left != null && root.right != null) {

        nodeCount[2]++;
        problem1(root.left);
        problem1(root.right);

     }else if(root.left != null && root.right == null) {

        nodeCount[1]++;
        problem1(root.left);

     }else if(root.left == null && root.right != null) {

        nodeCount[1]++;
        problem1(root.right);

     }else {

        nodeCount[0]++;
     }

     return nodeCount;
}

1 Ответ

0 голосов
/ 26 мая 2020

Я пишу грубый код, проверьте, решает ли он вашу проблему:

    HashMap<Integer, Integer> count = new HashMap<>();
    //For now, 0 key having a count of leaf nodes, 1 key count of nodes having a single child, 2 for both 

// Используйте inorder, pre или post для обхода дерева ... используйте countNodes, чтобы получить счет // I использовали hashmap для подсчета, вы также можете взять массив.

   public void inorder(TreeNode root){
       if(root == null) return;
       inorder(root.left);
       countNodes(root);
      inorder(root.right);
    }

  public void countNodes(TreeNode root){
       if(root == null) return;
       else if(root.left != null && root.right != null){
         count.put(2, 1 + count.getOrDefault(2,0));
       } 
      else if(root.left == null && root.right == null){
         count.put(0, 1 + count.getOrDefault(0,0));
       } 
      else{
         count.put(1, 1 + count.getOrDefault(1,0));
      } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...