preguntas cara treinta y dos: imprimir árbol binario de arriba a abajo

 
 

要求输出 8,10,6,9,11,5,7
方法一:定义一个队列,把出队的节点的左右子树节点近队,如果左右节点为null则不用进队

1  void PrintTree (phead BinaryTreeNode) {  
 2              si (phead == nuull) de retorno ;
3              Queue <BinaryTreeNode> cola = nueva cola ();
4              queue.add (phead);
5              , mientras que (queue.peek () =! Nulo ) {
 6                      BinaryTreeNode pNode = queue.poll ();  // 出队
7                      System.out.print (pNode.value);
8  
9                      // 子节点进队
10                      si (! PNode.Left = nulo ) queue.add (pNode.Left);
11                      si(! pNode.Right = nula ) queue.add (pNode.Right);
12              }
 13          
14      }

 

binario de impresión en capas aumentó dos variables se utilizan para representar un número en la capa actual no se imprimen, un número de la capa inferior representa

 void PrintTree (BinaryTreeNode PHEAD) {
             IF (PHEAD == nuull) de retorno ; 
            Queue <BinaryTreeNode> Queue = nueva nueva cola (); 
            queue.add (PHEAD); 

            int nextPrint = 0;   // número de nodos en el próximo nivel sin imprimir 
            int printNum = 1;   // número actual de nodos capa impresa no es 
            el tiempo (queue.peek () =! nulo ) { 
                    BinaryTreeNode • pNode = queue.poll ();   // dequeue 
                        PrintNum-- ; 
                    de System.out.print (pNode.value) ; 

                    // nodo hijo en el equipo 
                    si(! pNode.Left = nula ) { 
                           queue.add (pNode.Left); 
                            ++ nextPrint; 
                     } 
                    Si (pNode.Right =! Nula ) { 
                            queue.add (pNode.Right); 
                            ++ nextPrint; 
                    } 
                    Si (printNum == 0 ) { 
                            System.out.println (); 
                             PrintNum = nextPrint ;; 
                             nextPrint; = 0 ; 
                    }               
            } 
        }

 

Zigzag binario de impresión l ejemplo: 8,6,10,9,11,5,7
Resumen de análisis: el orden de impresión de la binario zigzag requiere dos pilas .
Si la impresión de capas impares, el primer salvado y guarde el nodo izquierdo al nodo derecho de otra pila,
si la impresión capas pares, excepto la primera a la izquierda y el nodo de la derecha y luego guardar el nodo pila a otra;

1  void PrintTree (phead BinaryTreeNode) {
 2          si (phead == nuull) de retorno ;
3          
4          Stack <Integer> s0 = nuevo Stack (); // 奇数
5         Pila <Integer> s1 = nuevo Stack (); // 偶数
6          
7          s0.push (phead);
8          
9          mientras que (s1.empty () ||! S0.empty ()) {
 10                  
11                      mientras que (! S0.empty ()) {
 12                             BinaryTreeNode pNode = s0.pop ();
13                             System.out.print (pNode.value);
14                          // 先左后右
15                           si (pNode.Letf) =! Nulo ) s1.push (pNode.Letf);
16                           si y sólo si (pNode.Right) =! Nula ) s1.push (pNode.Right);  
17                      }
 18                     System.out.println ();
19                      , mientras que (! {S1.empty ())
 20                            BinaryTreeNode pNode = s1.pop ();
21                             System.out.print (pNode.value);
22                          // 先右后左
23                           si(! pNode.Right = nula ) s0.push (pNode.Right);      
24                           si (pNode.Letf) =! Nula ) s0.push (pNode.Letf);                      
25                      }               
 26                   System.out.println ();
27                  
28          }
 29      }

 

Supongo que te gusta

Origin www.cnblogs.com/niliuxiaocheng/p/12592339.html
Recomendado
Clasificación