A travessia da hierarquia da árvore binária e o julgamento se uma árvore binária é uma árvore binária completa

Travessia de sequência

Sabemos que a travessia da árvore binária é dividida emTravessia de profundidade e travessia de largura
A travessia em profundidade é dividida emTraversal de primeira ordem, travessia de ordem intermediária, traversal de pós-ordem
A largura da primeira travessia é Travessia de sequência

Como o nome indica, a passagem da sequência é uma passagem camada por camada, de cima para baixo, da esquerda para a direita, conforme mostrado na figura abaixo: O resultado da passagem da sequência da camada é: abcdefg
Insira a descrição da imagem aqui

Ideias:

Como atravessar a sequência da árvore binária? Primeiro obtemos o nó raiz, em seguida, visitamos o nó esquerdo, visitamos o nó direito ...
Podemos colocar os nós na fila e, em seguida, colocar os nós esquerdo e direito na fila, respectivamente, e, finalmente, gerar uma saída para obter travessia de sequência.

Código:

public class TreeNode {
    
    
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int val) {
    
    
        this.val = val;
    }

    @Override
    public String toString() {
    
    
        return String.format("TreeNode{%c}", val);
    }
}
import java.util.LinkedList;
import java.util.Queue;
  
public class levelTraversal {
    
    
    public void level(TreeNode root) {
    
    
        if (root == null) {
    
    
            return;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
    
    
            TreeNode node = queue.remove();
            System.out.println((char) node.val);
            if (node.left != null) {
    
    
                queue.add(node.left);
            }
            if (node.right != null) {
    
    
                queue.add(node.right);
            }
        }
    }
}
/**
 *
 */
public class Test {
    
    
    public static void main(String[] args) {
    
    
        TreeNode a = new TreeNode('a');
        TreeNode b = new TreeNode('b');
        TreeNode c = new TreeNode('c');
        TreeNode d = new TreeNode('d');
        TreeNode e = new TreeNode('e');
        TreeNode f = new TreeNode('f');
        TreeNode g = new TreeNode('g');
        TreeNode h = new TreeNode('h');

        a.left = b; a.right = c;
        b.left = d; b.right = e;
        c.left = f; c.right = g;
        e.right = h;

        levelTraversal levelTraversal=new levelTraversal();
        levelTraversal.level(a);
    }
}

resultado:
Insira a descrição da imagem aqui

Determine se uma árvore binária é uma árvore binária completa

A árvore binária completa é derivada da árvore binária completa. Para uma árvore binária com uma profundidade de k e n nós, se e somente se nenhum de seus nós corresponder aos nós numerados de 1 a n na árvore binária completa de profundidade k, é uma árvore binária completa.
A árvore binária completa é um tipo especial de árvore binária completa.
Insira a descrição da imagem aqui
Podemos percorrer a sequência da árvore binária (incluindo nós vazios).
Resultado da árvore binária completa: abcdefg #####
Resultado da árvore binária incompleta: abcd ## ef ###
Quando nulo é encontrado na fila Quando, se o seguinte for nulo, então é uma árvore binária completa, caso contrário, não é uma árvore binária completa;

Link do tópico:
Teste de integridade da árvore binária
Insira a descrição da imagem aqui

class Solution {
    
    
    public boolean isCompleteTree(TreeNode root) {
    
    
        if (root == null) {
    
    
            return true;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        boolean flag = false;
        while (!queue.isEmpty()) {
    
    
            TreeNode node = queue.remove();
            if (node == null) {
    
    
                flag = true;
                continue;
            }
            if (flag) {
    
    
                return false;
            }
            queue.add(node.left);
            queue.add(node.right);

        }
        return true;
    }
}

Acho que você gosta

Origin blog.csdn.net/weixin_52142731/article/details/115271487
Recomendado
Clasificación