La espada se refiere a la profundidad de la oferta55-I- árbol binario

Descripción del problema

Ingrese el nodo raíz de un árbol binario para encontrar la profundidad del árbol. Desde el nodo raíz hasta el nodo hoja, los nodos (incluidos los nodos raíz y hoja) que atraviesan a su vez forman un camino del árbol, y la longitud del camino más largo es la profundidad del árbol.

P.ej:

Dado un árbol binario [3,9,20, null, null, 15,7],

    3
   / \
  9  20
    /  \
   15   7

Devuelve su profundidad máxima 3.

Ideas para resolver problemas

Primera búsqueda en profundidad (DFS)

También se puede entender como un recorrido recursivo de un árbol binario.
Tomamos la profundidad del árbol binario como parámetro y luego realizamos un recorrido recursivo del árbol binario. Cuando se atraviesa el nodo hoja, la profundidad del nodo principal se compara con la profundidad máxima actual Si la profundidad del nodo principal es mayor, se actualizará la profundidad máxima actual. De lo contrario, agregue 1 al valor de profundidad y continúe encontrando recursivamente los subárboles izquierdo y derecho.

class Solution {
    
    
    private int mDepth;             //全局变量,保存当前最大深度
	private void SeaMaxDepth(TreeNode p, int i) {
    
    
        //当p结点为空时,说明此时到了叶结点,然后将父节点的深度与当前最大深度进行比较
        //以便更新当前最大深度
        if(p==null){
    
    
            mDepth=Math.max(i,mDepth);
        }else{
    
    
            SeaMaxDepth(p.left,i+1);        //否则的话,深度值+1,继续寻找左子树
            SeaMaxDepth(p.right,i+1);       //继续寻找右子树
        }
    }
	public int maxDepth(TreeNode root) {
    
    
        SeaMaxDepth(root,0);
        return mDepth;
	}
}

Recorrido jerárquico (BFS)

La búsqueda transversal de jerarquía de árbol / primero en amplitud se implementa a menudo mediante colas.
Punto clave: Cada vez que se atraviesa una capa, el contador es + 1 + 1, hasta que se completa el recorrido, se puede obtener la profundidad del árbol.
Para conocer los pasos específicos del recorrido de nivel, consulte el recorrido de secuencia de nivel del árbol binario.

class Solution {
    
    
	public int maxDepth(TreeNode root) {
    
    
        if(root==null){
    
    
            return 0;
        }
        int mDepth=0;
        //linkedlist的remove方法是移出链头元素
        LinkedList<TreeNode> queue=new LinkedList<TreeNode>();
        //将根节点入队,然后不断的遍历队列
        queue.add(root);        
        while(!queue.isEmpty()){
    
    
            //获取当前队列的长度,这个队列的长度相当于当前层次的结点个数
            int size=queue.size();
            //将队列中的元素都拿出来,并将其左右结点都入队。每一个for循环,都对应着一个层次
            for(int i=0;i<size;i++){
    
    
                TreeNode p=queue.remove();
                if(p.left!=null){
    
    
                    queue.add(p.left);
                }
                if(p.right!=null){
    
    
                    queue.add(p.right);
                }
            }
            //每遍历一层,当前层次即深度+1
            mDepth++;
        }
        return mDepth;
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_39736597/article/details/113942193
Recomendado
Clasificación