首页 > 其他分享 >[代码随想录] 第十三天

[代码随想录] 第十三天

时间:2024-01-24 21:00:12浏览次数:35  
标签:right TreeNode val int 代码 随想录 que left 第十三天

226.翻转二叉树[https://leetcode.cn/problems/invert-binary-tree/description/]
递归:递归三部曲:①确定递归函数的参数和返回值 ②确定终止条件 ③确定单层递归的逻辑

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        swap(root);
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }

    public void swap(TreeNode p) {
        TreeNode q = p.left;
        p.left = p.right;
        p.right = q;
    }
}

迭代:直接套用迭代前序遍历模板即可,将visit()调整为swap()即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        Stack<TreeNode> sc = new Stack<>();
        sc.push(root);
        TreeNode p;
        while (!sc.isEmpty()) {
            while (!sc.isEmpty()) {
                p = sc.pop();
                swap(p);//此处就是visit(p);
                if (p.right != null) {
                    sc.push(p.right);
                }
                if (p.left != null) {
                    sc.push(p.left);
                }
            }
        }
        return root;
    }

    public void swap(TreeNode p) {
        TreeNode q = p.left;
        p.left = p.right;
        p.right = q;
    }
}
**-----------------------分割线-------------------------**

102.二叉树的层序遍历[https://leetcode.cn/problems/binary-tree-level-order-traversal/]
思路:与迭代前序遍历类似,重点在于int loop = que.size();使用loop记录当前数组大小,使用for一次性弹出多个元素出栈记录,入栈非空孩子节点

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ans = new ArrayList<>();
        if (root == null) {
            return ans;
        }
        Queue<TreeNode> que = new LinkedList<>();
        que.offer(root);
        while (!que.isEmpty()) {
            List<Integer> list = new ArrayList<>();
            int loop = que.size();
            for (int i = 0; i < loop; i++) {
                TreeNode temp = que.poll();
                list.add(temp.val);
                if (temp.left != null) {
                    que.offer(temp.left);
                }
                if (temp.right != null) {
                    que.offer(temp.right);
                }
            }
            ans.add(list);
        }
        return ans;
    }
}
**-----------------------分割线-------------------------**

199.二叉树的右视图[https://leetcode.cn/problems/binary-tree-right-side-view/]
思路:层次遍历二叉树的扩展,重点在于使用loop循环遍历元素,退出循环时,p所指向的元素就是每一层最右边的元素,故

标签:right,TreeNode,val,int,代码,随想录,que,left,第十三天
From: https://www.cnblogs.com/cssg/p/17985837

相关文章

  • 代码随想录 day29 非递减子序列 全排列 全排列 II
    非递减子序列cpp就业还是太难了还是转java吧好歹这个对双非还友好一些尝试写java的第一天本题关键是理解非递减子序列判断条件需要额外一个数组记录当前元素是否在本树层使用过记录在这个数组就说明用过了全排列本题系统的演示了怎么写全排列和最基本的组合问题的......
  • Java抛出异常且没有被捕捉的情况下,后面的代码还能运行吗?
    Java有try-catch-finally的异常处理机制,包括以下几种情况:1、不抛出异常,try里面的代码、finally里面的代码、finally以后的代码都将正常执行,而catch里面的代码不会执行。2、抛出异常且被catch捕获,try里面的代码部分执行,catch里面的代码、finally里面的代码、finally以后的代码都将......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.二分查找.html简单的二分查找法,核心是认识区间的意义,注意以下几点:middle=low+(low+high)/2;这种写法可以防止溢出。注意low和high的循环条件判断,如果是左闭右闭......
  • day25 代码随想录算法训练营 216. 组合总和 III
    题目:216.组合总和III我的感悟:还是按照之前的套路来。多了一个参数path_sum应该是有两处剪枝,1处横线剪枝,1处纵向剪枝?或者说1处求和剪枝?1处范围剪枝?【疑问】理解难点:不剪枝的已经模的差不多了,剪枝的再看看 自己听了一遍写的:[未剪枝]classSolution:defcombina......
  • Git提交代码注释规范
    feat(新功能):新增代码文件:新功能相关的代码文件、模块等。更新测试文件:添加新功能的测试用例。fix(修复):修改代码文件:包含有问题代码的文件。更新测试文件:修复问题的测试用例。docs(文档):Markdown文件:更新项目文档、README、帮助文件等。注释:更新代码中的注释,提供更详......
  • html 禁止f12调试代码 debugger
    setInterval(()=>{(function(a){return(function(a){return(Function('Function(arguments[0]+"'+a+'")()'))})(a)})('bugger')('de',0,0,(0,0));},1000);js代码放到HTMLscrip标签块中即可......
  • java代码通过百度获取第一条搜索结果代码以及注意事项
    导入依赖:<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>4.4.3</version></dependency><de......
  • 深度解析Android APP加固中的必备手段——代码混淆技术
    AndroidAPP加固是优化APK安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下AndroidAPP加固的具体实现方式。混淆代码使用ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解,官网下载ipaguard即可。加固混淆为了保......
  • 如何在word中优雅地插入代码
    如何在word中优雅地插入代码呢?网上的方法大致有这么几种:利用notepad++来实现(操作路径有点长,比较麻烦)自己在word做模版(这个模版折腾下来倒是可以一劳永逸,但是不支持不同语言的高亮)利用word的宏来实现,但需要写宏脚本(比较麻烦)国外的 www.planetb.ca 网站进去太慢了,体验很不......
  • 第一行代码 Android(第3版)PDF下载
    《第一行代码Android第3版》被Android开发者誉为“Android学习第一书”。全书系统全面、循序渐进地介绍了Android软件开发的必备知识、经验和技巧。《第一行代码Android第3版》基于Android10.0对第2版进行了全面更新,不仅将所有知识点都在Android10.0系统上进行了重新适配,同......