Skip to content

Latest commit

 

History

History
71 lines (59 loc) · 2.75 KB

107.md

File metadata and controls

71 lines (59 loc) · 2.75 KB

✏️ Leetcode基础刷题之(107. Binary Tree Level Order Traversal II)

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);
            }
        }

💾 今天的数据库(178. Rank Scores)

💾 题目描述

写一个sql对分数进行排名,如果两个分数相等,那么他们的排名也是相同的,值得注意的是,下一个排名应该是上一个排名的连续数,比如说有这里有两个都是4分,两个第一名,那么3.85就是第二名而不是第三名.


💾 最终实现sql

SELECT Scores.Score,
(SELECT COUNT(DISTINCT Score) as 'Score' From Scores b where b.score >=Scores.Score) 
RANK from Scores ORDER BY Score Desc

联系