>백엔드 개발 >PHP 튜토리얼 >PHP에서 이진 트리의 순차 인쇄를 구현하는 방법

PHP에서 이진 트리의 순차 인쇄를 구현하는 방법

小云云
小云云원래의
2018-01-16 16:36:531351검색

이 글은 주로 PHP에서 지그재그 순서로 이진 트리를 인쇄하는 방법을 소개하고, 이진 트리의 스택 순회와 결합된 PHP의 관련 작업 기술을 포함하고 있어 모두에게 도움이 되기를 바랍니다.

Question

이진 트리를 지그재그 패턴으로 인쇄하는 함수를 구현해 주세요. 즉, 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 레이어는 오른쪽에서 왼쪽으로, 세 번째 줄은 인쇄됩니다. 왼쪽부터 인쇄됩니다. 오른쪽부터 인쇄합니다. 다른 줄도 마찬가지입니다.

솔루션

두 개의 스택 사용

구현 코드


<?php
/*class TreeNode{
  var $val;
  var $left = NULL;
  var $right = NULL;
  function __construct($val){
    $this->val = $val;
  }
}*/
function MyPrint($pRoot)
{
  if($pRoot == NULL)
    return [];
  $current = 0;
  $next  = 1;
  $stack[0] = array();
  $stack[1] = array();
  $resultQueue = array();
  array_push($stack[0], $pRoot);
  $i = 0;
  $result = array();
  $result[0]= array();
  while(!empty($stack[0]) || !empty($stack[1])){
    $node = array_pop($stack[$current]);
    array_push($result[$i], $node->val);
    //var_dump($resultQueue);echo "</br>";
    if($current == 0){
      if($node->left != NULL)
        array_push($stack[$next], $node->left);
      if($node->right != NULL)
        array_push($stack[$next], $node->right);
    }else{
      if($node->right != NULL)
        array_push($stack[$next], $node->right);
      if($node->left != NULL)
        array_push($stack[$next], $node->left);
    }
    if(empty($stack[$current])){
      $current = 1-$current;
      $next  = 1-$next;
      if(!empty($stack[0]) || !empty($stack[1])){
        $i++;
        $result[$i] = array();
      }
    }
  }
  return $result;
}

관련 권장 사항:

선주문, 인오더 및 포스트오더의 PHP 구현 순회 이진 트리 작업 예제

PHP를 사용하여 이진 트리가 대칭인지 확인하는 방법

JavaScript는 이진 트리의 선순, 순순 및 후순 순회 방법을 구현합니다

위 내용은 PHP에서 이진 트리의 순차 인쇄를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.