迭代二叉樹

wifi發表於2020-04-24

Class TreeNode {     public int $val;      public ?TreeNode $left  = null;     public ?TreeNode $right = null;      public function __construct(int $x)     {         $this->val = $x;     } }  Class Solution {     public function preorderTraversal(TreeNode $root) : ?array     {         if (empty($root)) return [];          $stack  = [$root];         $output = array();          while (boolval($stack)) {             $root = array_pop($stack);              if (boolval($root)) {                 array_push($output, $root->val);                 if (boolval($root->right)) {                     array_push($stack, $root->right);                 }                 if (boolval($root->left)) {                     array_push($stack, $root->left);                 }             }         }          return $output;     }       public function inorderTraversal(TreeNode $root) : ?array     {         $stack = $output = array();         $curr = $root;          while (boolval($curr) || boolval($stack)) {             while (boolval($curr)) {                 array_push($stack, $curr);                 $curr = $curr->left;             }             $curr = array_pop($stack);             array_push($output, $curr->val);             $curr = $curr->right;         }         return $output;     }      public function postorderTraversal(TreeNode $root) : ?array     {         if (empty($root)) return [];          $stack  = [$root];         $output = array();          while (boolval($stack)) {             $root = array_pop($stack);              if (boolval($root)) {                 array_push($output, $root->val);                 if (boolval($root->left)) {                     array_push($stack, $root->left);                 }                 if (boolval($root->right)) {                     array_push($stack, $root->right);                 }             }         }          return array_reverse($output);     } }  $first  = new TreeNode(1); $second = new TreeNode(2); $third  = new TreeNode(3);  $first->right = $second; $second->left = $third;     //     1    //      \    //       2    //      /    //     3  $solution = new Solution();  $result['pre'] = $solution->preorderTraversal($first); $result['in'] = $solution->inorderTraversal($first); $result['post'] = $solution->postorderTraversal($first);   print_r($result); 
Array (     [pre] => Array         (             [0] => 1             [1] => 2             [2] => 3         )      [in] => Array         (             [0] => 1             [1] => 3             [2] => 2         )      [post] => Array         (             [0] => 3             [1] => 2             [2] => 1         )  )  [Process exited 0]
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章