Oferta para probar la seguridad de cincuenta y nueve: orden de impresión en zigzag árbol binario

trabajo informal

Implementar según una función de árbol binario de impresión zigzag, es decir, de izquierda a derecha, la primera línea de impresión de la segunda capa a fin de imprimir de derecha a izquierda, la tercera línea de izquierda a derecha de la impresión, en otras filas sucesivamente.

pensamiento

En primer lugar, pensar en esto por un recorrido de árbol binario, y es un recorrido secuencia (no hace falta decir Creo que el Ah)
pero para los propósitos de la secuencia de recorrido de izquierda a derecha son, cómo ponemos en práctica la secuencia de recorrido, utilizando la aplicación de colas , cada capa se coloca en una cola para ser adentro hacia afuera, y ahora queremos para conseguir la forma, no es que la sentencia una línea especial, primera puesta en una pila en el interior, y luego se toma en el momento que se invertirá el pato. Es un sencillo recorrido secuencia de deformación, personalmente considero árbol para la prueba en la entrevista un buen número de recorrido básico debe ser cocinado a fondo y corazón, al igual que el algoritmo de clasificación, después, una parte del algoritmo de ordenación.

código

  public ArrayList<ArrayList<Integer>> Print(TreeNode root) {
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        Stack<Integer> stack=new Stack<Integer>();
         ArrayList<ArrayList<Integer>> arrays=new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> array=new ArrayList<Integer>();
        int j=1;
        if(root==null)return arrays;
        queue.offer(root);
       // array.add(root.val); 如何进行表示表示他们是在同一层 是个问题的关键所在 这一点想不出来啊有点 可以利用for循环来实现
           
        while(queue.size()!=0){
            int len=queue.size();
            for(int i=0;i<len;i++){
                 TreeNode temp=queue.poll();
            if(temp.left!=null){
                queue.add(temp.left);
            }
            if(temp.right!=null){
                queue.add(temp.right);
            }
                if(j%2==0){
                    stack.push(temp.val);
                    if(i==len-1){
                        while(!stack.isEmpty()){
                            int p=stack.pop();
                            array.add(p);
                        }
                    }
                }
                else{
                     array.add(temp.val);
                }
            }
            j++;
            arrays.add(array);
             array=new ArrayList<Integer>();
        }
        return arrays;
    }
Publicado 84 artículos originales · ganado elogios 53 · vistas 7385

Supongo que te gusta

Origin blog.csdn.net/weixin_44015043/article/details/105422372
Recomendado
Clasificación