【题目】
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7
返回锯齿形层序遍历如下:
[ [3], [20,9], [15,7]]
【题解】
/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $right = null; * function __construct($value) { $this->val = $value; } * } */class Solution { /** * @param TreeNode $root * @return Integer[][] */ function zigzagLevelOrder($root) { if($root === null){ return []; } $level = 0; $queue = new SplQueue(); //用一个队列来维护这个二叉树的节点 $queue->enqueue($root); $ans = []; while($count = $queue->count()){ $currentList = []; for($i=0;$i $node = $queue->dequeue(); if($level%2 == 0){ //偶数 array_push($currentList,$node->val); }else{ //奇数 array_unshift($currentList,$node->val); } if($node->left != null){ $queue->enqueue($node->left); } if($node->right != null){ $queue->enqueue($node->right); } } $ans[] = $currentList; $level++; } return $ans; }}
the end~