题意:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
解题思路:
使用BFS查看层次
/**
* 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 minDepth($root) {
$ans = 0;
$a = array();
array_push($a, $root);
if($root == null) {
return 0;
}
while($cnt = count($a)) {
$ans++;
for($i = 0; $i < $cnt; $i++) {
$node = array_shift($a);
if($node->left == null && $node->right == null){
break 2; // 直接退出所有循环
}
if($node->left != null) {
array_push($a, $node->left);
}
if($node->right != null) {
array_push($a, $node->right);
}
}
}
return $ans;
}
}
使用DFS查看树深度
/**
* 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 minDepth($root) {
if($root == null) {
return 0;
}
if($root->left == null) {
return $this->minDepth($root->right) + 1;
}
if($root->right == null) {
return $this->minDepth($root->left) + 1;
}
return min($this->minDepth($root->left), $this->minDepth($root->right)) + 1;
}
}