leetcode刷题_OJ 102

本文介绍了一种解决二叉树层次遍历问题的方法。通过递归的方式进行节点的逐层遍历,并将每层的节点值分别存入不同的列表中,最终形成一个二维列表作为结果返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
return its level order traversal as:
[
  [3],
  [9,20],
  [15,7]
]
二叉树的层次遍历,不同的地方是每一层的值要用一个列表存储,最终输出的是一个二维列表。

近来做回溯做得很多,这题也大概按了这样的模板来实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result=new ArrayList<>();
        List<Integer> subtree=new ArrayList<>();
        backTrack(result,0,root);
        return result;
    }

    private void backTrack(List<List<Integer>> result,int level,TreeNode root){
        if(root == null) return;
        if(result.size() == level){//根据层数对应新增列表
            result.add(new ArrayList<>());
        }
        result.get(level).add(root.val);//往刚才新增的空列表里插入值
        if(root.left != null) backTrack(result,level+1,root.left);
        if(root.right != null) backTrack(result,level+1,root.right);
    }

}

 

### LeetCode C++ 攻略与最佳实践 #### 使用C++LeetCode的优势 C++作为一种功能强大且高效的编程语言,特别适合解决算法和数据结构问。它提供了丰富的标准库支持,例如`<vector>`、`<map>`、`<set>`等容器类以及强大的STL(Standard Template Library),这些工具能够显著简化复杂问的实现过程[^1]。 #### 基本流程 针对每一道目,推荐采用如下方法论来提升效率和效果: - **理解问**:仔细阅读目描述,明确输入输出的要求及其约束条件。 - **分析解法**:思考可能的数据结构或者算法模型适用此场景,并评估时间空间复杂度。 - **编写代码**:基于所选方案用C++实现解决方案,注意边界情况处理。 - **优化代码**:尝试改进初始版本以达到更低的时间或内存消耗目标。 以下是几个具体技巧帮助你在LeetCode平台上更好地运用C++: #### 数据结构的选择 合理选用合适的数据结构对于解决问至关重要。例如,在涉及频繁插入删除操作时可考虑使用双向链表;当需要快速查找某个元素是否存在集合中,则哈希表可能是更好的选择[^2]。 ```cpp // Example of using unordered_map (hash table) in C++ #include <unordered_map> using namespace std; int main(){ unordered_map<int, int> myMap; myMap[1] = 100; // Insert key-value pair into the map. } ``` #### STL 的高效应用 充分利用C++ Standard Template Library(STL),可以极大地方便我们完成各种常见任务而无需自己手动编码。像sort函数用于数组排序,binary_search用来判断有序序列里是否有特定值等等都是非常好用的功能模块[^3]。 ```cpp // Using sort function from <algorithm> library to order elements ascendingly. #include <vector> #include <algorithm> void exampleSort(vector<int>& nums){ sort(nums.begin(), nums.end()); } // Utilizing binary search on a sorted array with lower_bound and upper_bound functions. bool containsElement(const vector<int>& vec, const int& target){ return binary_search(vec.begin(), vec.end(), target); } ``` #### 动态规划与递归调优 动态规划是一种重要的算法设计策略,适用于求解具有重叠子问特性的最优化问。在实际编码过程中要注意状态转移方程定义清晰准确,同时也要关注如何减少不必要的重复计算提高性能。另外,适当时候可以通过记忆化搜索的方式将原本指数级增长的暴力枚举转化为多项式级别的执行速度。 ```cpp // A simple DP problem solved by bottom-up approach. const int MAXN = 1e5+7; long long dp[MAXN]; void solveDpProblem(int n){ memset(dp, -1, sizeof(dp)); dp[0]=dp[1]=1; for(int i=2;i<=n;i++) { dp[i]=(dp[i-1]+dp[i-2])%MOD;// MOD is defined elsewhere as needed constant value like 1e9+7 etc.. } } ``` #### 测试环境搭建 为了方便本地调试运行程序逻辑正确与否之前提交至在线评测系统前最好先自行验证一下结果是否符合预期。可以借助Code::Blocks,Eclipse CDT,Vscode等多种IDE构建个人开发环境模拟oj机制从而加快迭代周期缩短错误修复耗时。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值