144.二叉树的前序遍历

递归代码倒不难,但仔细想想为什么这样递归我又是一头雾水,为什么这样递归能实现前序遍历呢,递归的本质还是没懂。用栈实现递归我也没懂。。。真的超级无敌烧脑。

class Solution {

public void preorder(TreeNode root,List<Integer>ans){

if(root==null)

return ;

ans.add(root.val);

preorder(root.left,ans);

preorder(root.right,ans);

}

public List<Integer> preorderTraversal(TreeNode root) {

List<Integer> ans=new ArrayList<Integer>();

preorder(root,ans);

return ans;

}

}

以下是栈的解法,自己模拟一遍发现确实没啥问题,但是为什么代码这样写呢。。。

class Solution {

public List<Integer> preorderTraversal(TreeNode root) {

List<Integer> ans=new ArrayList<>();

Stack<TreeNode> stack=new Stack<>();

if(root==null)

return ans;

stack.push(root);

while(stack.isEmpty()==false){

TreeNode node=stack.pop();

ans.add(node.val);

if(node.right!=null){

stack.push(node.right);

}

if(node.left!=null){

stack.push(node.left);

}

}

return ans;

}

}

94.二叉树的中序遍历

递归的解法就不放了,递归这东西,看了一眼会了,但仔细思考又发觉不会。中序遍历时栈的实现和前序和后序都不一样呢。

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        Stack<TreeNode> stack=new Stack<>();
        List<Integer> ans=new ArrayList<>();
        if(root==null)
        return ans;
        TreeNode cur=new TreeNode();
        cur=root;
        while(stack.isEmpty()==false||cur!=null){
            if(cur!=null){
                stack.push(cur);
                cur=cur.left;
            }
            else{
                cur=stack.pop();
                ans.add(cur.val);
                cur=cur.right;
            }
        }
        return ans;
    }
}

力扣(144.94)补9.4相关推荐

  1. 力扣(Leetcode)-94. 二叉树的中序遍历

    描述 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 ...

  2. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数

    文章目录 题目 思路 AC代码 后记 题目 从房屋收集雨水需要的最少水桶数 思路 思路是贪心,因为我们需要从左向右找寻所有的水桶数,所以我们对于每一个房屋都优先判断右边是否能放水桶,右边不能放就看左边 ...

  3. 力扣学习记录(每日更新)

    文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...

  4. 《LeetCode力扣练习》第94题 二叉树的中序遍历 Java

    <LeetCode力扣练习>第94题 二叉树的中序遍历 Java 一.资源 题目: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,nul ...

  5. (补)20210623:力扣第246周周赛(下)

    力扣第246周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 统计子岛屿 查询差绝对值的最小值 思路与算法 统计子岛屿 : 老DFS了,总之就是遍历题,无需多言,搜就行了. 查询差绝对值的最小 ...

  6. (补)20200911:力扣204周周赛题解下

    力扣204周周赛题解下 题目 思路与算法 代码实现 写在最后 题目 3.1568. 使陆地分离的最少天数 思路与算法 本周周赛第三题勉强可以看看,第四题超出我目前的水平,跳过.第三题是一个典型的dfs ...

  7. 力扣第314场周赛补题

    1.题目:6200. 处理用时最长的那个任务的员工 - 力扣(LeetCode) 思路:两个数组记录处理时间与结果,通过遍历最长时间 class Solution { public:int harde ...

  8. (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和

    代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...

  9. 力扣第303场周赛补题

    力扣 第三题:设计食物评分系统 示例 输入 ["FoodRatings", "highestRated", "highestRated", ...

  10. 力扣(简单+中等)50题整理总结

    文章目录 前言 一.简单题 1. 两数之和 7. 整数反转 9. 回文数 13. 罗马数字转整数 14. 最长公共前缀 20. 有效的括号 21. 合并两个有序链表 26. 删除有序数组中的重复项 2 ...

最新文章

  1. 【收藏】Docker安装微信
  2. 反思网络中的观点:太过杂乱 需要很强的甄别能力
  3. 武林c语言,详解C语言中条件编译
  4. JAVA面向对象初步知识总结:封装、继承、多态
  5. java socket 握手_TCP建立连接三次握手过程详解(wireshark截图、java socket源码)
  6. Java第二章:数据类型和运算符
  7. Ajax与jQuery异步加载数据
  8. HTTP1.1与HTTP1.0
  9. RHCE 学习笔记(32) - DNS
  10. 用Unity3D实现打飞碟游戏
  11. WMI的讲解(是什么,做什么,为什么)
  12. Spatial Join学习
  13. 学习笔记,什么是双活
  14. 东北师范大学计算机学院的导师李俊,东北师范大学计算机科学与信息技术学院研究生导师简介-胡丽红...
  15. 电影评论分类:二分类问题 —— R语言实现
  16. ggplot2中1单位线条和字体的究竟相当于多少pt?
  17. Zeal离线文档下载,以及报错解决方法
  18. C语言打字游戏(无错误警告版)
  19. 【完善】微信餐厅点单小程序+后台管理系统的设计与实现(python实现)
  20. 计算机系统结构划分,计算机系统结构59288.ppt

热门文章

  1. 程序员的工资是不是被高估了?
  2. 关于Linux LOOPBACK网口抓包的一个细节
  3. 全球及中国玄武岩纤维市场竞争格局分析及发展前景预测报告2022-2028年版
  4. hadoop3.X 和 Hadoop 2.X的web端口号访问
  5. 大疆校招和社招 各岗位内推码--更新20220717
  6. 媒体 | 冒志鸿:理想nine percent最难寻
  7. Andorid微信刷脸支付使用过程解析
  8. iReal Pro for Mac(优秀的音乐练习参考工具)
  9. 互联网公司的监控运维
  10. DocSearcher:文档搜索引擎