要求输出 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 }