2019-02-27 吴亲库里 库里的深夜食堂
给定一棵二叉树,使其自下而上遍历输出值(从下到上,从左到右,逐层).
给定一个二叉树是[3,9,20,null,null,15,17],那么返回来从下往上的顺序就是[15,7,9,20,3],节点9没有子节点(他本身就是叶子节点),所以返回来的时候从20的子节点最左边开始.
当然我的思路还是递归.递归就是把大规模的问题转换为规模小的相似的子问题来解决.在函数的实现时,往往大问题的解决方法和小问题是一样的,所以就产生了调用自身函数的情况.递归一定要有明确的递归出口条件,否则程序就变成死循环了.另外递归存在简单情况下的场景,我们应该直接给出答案. 通过递归遍历整个二叉树,把对应节点的值存入到预先定义好的数组中,最后在通过php内置函数array_reverse(array,preserve)翻转数组
public $result=[];
/**
* @param TreeNode $root
* @return Integer[][]
*/
function levelOrderBottom($root) {
$this->levelTree($root,0);
$this->result=array_reverse($this->result);
return $this->result;
}
function levelTree($root,$level){
if(!$root){
return;
}
if(!isset($this->result[$level])){
$this->result[$level]=[];
}
$this->result[$level][]=$root->val;
if($root->left || $root->right){
$level++;
if(!isset($this->result[$level])){
$this->result[$level]=[];
}
$this->levelTree($root->left,$level);
$this->levelTree($root->right,$level);
}
}
写一个sql对分数进行排名,如果两个分数相等,那么他们的排名也是相同的,值得注意的是,下一个排名应该是上一个排名的连续数,比如说有这里有两个都是4分,两个第一名,那么3.85就是第二名而不是第三名.
SELECT Scores.Score,
(SELECT COUNT(DISTINCT Score) as 'Score' From Scores b where b.score >=Scores.Score)
RANK from Scores ORDER BY Score Desc