[Projeto e análise de algoritmo (resposta após a aula)] Recursão de lista / árvore

1

Para a lista unicamente ligada L sem um nó líder, um algoritmo recursivo é projetado para produzir todos os valores dos nós em uma ordem positiva.

public class Solution1 {
    
    
    public void printL(ListNode node) {
    
    
        if (node == null) {
    
    
            return;
        }
        System.out.println(node.val);
        printL(node.next);
    }
}

2

Para a lista unicamente ligada L sem um nó líder, um algoritmo recursivo é projetado para produzir todos os valores de nó em ordem reversa.

public class Solution2 {
    
    
    public void printL(ListNode node) {
    
    
        if (node == null) {
    
    
            return;
        }
        printL(node.next);
        System.out.println(node.val);
    }
}

3

Para uma lista L unicamente ligada não vazia sem um nó principal, projete um algoritmo recursivo para retornar o endereço do maior nó (assumindo que tal nó seja único).

public class Solution3 {
    
    
    public ListNode findMax(ListNode node) {
    
    
        if (node.next == null) {
    
    
            return node;
        }
        return node.val > findMax(node.next).val ? node : findMax(node.next);
    }
}

4

Para uma lista L unida unicamente sem um nó principal, um algoritmo recursivo é projetado para retornar o endereço do primeiro nó cujo valor é x, ou nulo se não houver tal nó.

public class Solution4 {
    
    
    public ListNode findNode(ListNode node, int target) {
    
    
        if (node == null) {
    
    
            return null;
        }
        if (node.val == target) {
    
    
            return node;
        }
        return findNode(node.next, target);
    }
}

5

Para a lista ligada individualmente L sem um nó líder, um algoritmo recursivo é projetado para excluir o primeiro nó cujo valor é x.

public class Solution5 {
    
    

    /**
     * 虽说是递归,本质还是双/三指针的向右滑动
     * 设置一个dummy头结点很有必要
     */
    public void deleteNode(ListNode head, int target) {
    
    
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        delete(dummy, head, target);
    }


    private void delete(ListNode pre, ListNode node, int target) {
    
    
        if (node == null) {
    
    
            return;
        }
        if (node.val == target) {
    
    
            pre.next = node.next;
            return;
        }
        delete(node, node.next, target);
    }
}

6

Assumindo que a árvore binária é armazenada em uma estrutura de armazenamento em cadeia binária e o valor do nó é do tipo int, um algoritmo recursivo é projetado para encontrar a soma de todos os nós folha na árvore bt.

public class Solution6 {
    
    
    public int nodeSum(TreeNode node) {
    
    
        if (node == null) {
    
    
            return 0;
        }
        if (node.left == null && node.right == null) {
    
    
            return node.val;
        }
        return nodeSum(node.left) + nodeSum(node.right);
    }
}

7

Supondo que a árvore binária seja armazenada em uma estrutura de armazenamento de cadeia binária e o valor do nó seja do tipo int, um algoritmo recursivo é projetado para encontrar o número de nós na árvore binária bt cujo valor do nó é maior ou igual a k.

public class Solution7 {
    
    
    public int countNode(TreeNode node, int k) {
    
    
        if (node == null) {
    
    
            return 0;
        }
        return (node.val >= k ? 1 : 0) + countNode(node.left, k) + countNode(node.right, k);
    }
}

8

Assumindo que a árvore binária é armazenada em uma estrutura de armazenamento de cadeia binária e todos os valores de nó são diferentes, projete um nível de nó com um valor de algoritmo recursivo de x (com nível de nó 1) e retorne 0 se nenhum nó for encontrado .

public class Solution8 {
    
    
    public int findLayerOfK(TreeNode node, int k, int level) {
    
    
        if (node == null) {
    
    
            return 0;
        }
        if (node.val == k) {
    
    
            return level;
        }
        int t1 = findLayerOfK(node.left, k, level + 1);
        int t2 = findLayerOfK(node.right, k, level + 1);
        return t1 != 0 ? t1 : t2;
    }
}

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

⭐️ Esta deve ser a solução Java mais bonita em toda a rede> _ <

Acho que você gosta

Origin blog.csdn.net/m0_46202073/article/details/115040965
Recomendado
Clasificación