PHP实现按之字形顺序打印二叉树的方法

时间:2022-08-22 19:47:52

本文实例讲述了PHP实现按之字形顺序打印二叉树的方法。分享给大家供大家参考,具体如下:

问题

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

解决思路

使用两个栈

实现代码

  1. <?php 
  2. /*class TreeNode{ 
  3.   var $val; 
  4.   var $left = NULL; 
  5.   var $right = NULL; 
  6.   function __construct($val){ 
  7.     $this->val = $val; 
  8.   } 
  9. }*/ 
  10. function MyPrint($pRoot) 
  11.   if($pRoot == NULL) 
  12.     return []; 
  13.   $current = 0; 
  14.   $next  = 1; 
  15.   $stack[0] = array(); 
  16.   $stack[1] = array(); 
  17.   $resultQueue = array(); 
  18.   array_push($stack[0], $pRoot); 
  19.   $i = 0; 
  20.   $result = array(); 
  21.   $result[0]= array(); 
  22.   while(!empty($stack[0]) || !empty($stack[1])){ 
  23.     $node = array_pop($stack[$current]); 
  24.     array_push($result[$i], $node->val); 
  25.     //var_dump($resultQueue);echo "</br>"; 
  26.     if($current == 0){ 
  27.       if($node->left != NULL) 
  28.         array_push($stack[$next], $node->left); 
  29.       if($node->right != NULL) 
  30.         array_push($stack[$next], $node->right); 
  31.     }else
  32.       if($node->right != NULL) 
  33.         array_push($stack[$next], $node->right); 
  34.       if($node->left != NULL) 
  35.         array_push($stack[$next], $node->left); 
  36.     } 
  37.     if(empty($stack[$current])){ 
  38.       $current = 1-$current; 
  39.       $next  = 1-$next; 
  40.       if(!empty($stack[0]) || !empty($stack[1])){ 
  41.         $i++; 
  42.         $result[$i] = array(); 
  43.       } 
  44.     } 
  45.   } 
  46.   return $result; 

希望本文所述对大家PHP程序设计有所帮助。