层次遍历二叉树(BFS)
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Integer[]
*/
function rightSideView($root) {
$ans = [];
if ( $root == null ) {
return $ans;
}
$queue = [];
array_push($queue, $root);
while ( count($queue) > 0 ) {
$len = count($queue);
for ($i = 0; $i < $len; $i++) {
$node = array_shift($queue);
if ( $i+1 == $len ) { //右视图看到的层级遍历的最后一个节点
array_push($ans, $node->val);
}
// if ( $i == 0 ) { //左视图看到的都是层级遍历的第一个节点
// array_push($ans, $node->val);
// }
if ( $node->left ) {
array_push($queue, $node->left);
}
if ( $node->right ) {
array_push($queue, $node->right);
}
}
}
return $ans;
}
}
深度遍历二叉树(DFS)
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Integer[]
*/
function rightSideView($root) {
$ans = [];
if ( $root == null ) {
return $ans;
}
$this->dfs($root, 0, $ans);
return $ans;
}
function dfs($root, $depth, &$ans) {
if ( $root == null ) {
return;
}
// 访问顺序:节点->右子树->左子树
if ($depth === count($ans) ) { //仅记录每层第一次加入的元素
array_push( $ans, $root->val );
}
$this->dfs( $root->right, $depth+1, $ans );
$this->dfs( $root->left, $depth+1, $ans );
}
}