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

[代码随想录] 第十二天

时间:2024-01-23 19:22:59浏览次数:26  
标签:right TreeNode val 代码 随想录 ans sc 第十二天 left

144.二叉树的前序遍历[https://leetcode.cn/problems/binary-tree-preorder-traversal/]
思路:栈实现的迭代遍历:出栈记录,右孩子非空右孩子进栈,左孩子非空左孩子进栈。

/**
 * 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<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        if (root == null) {
            return ans;
        }
        Stack<TreeNode> sc = new Stack<>();
        sc.push(root);
        TreeNode p;
        while (!sc.isEmpty()) {
            p = sc.pop();
            ans.add(p.val);
            if (p.right != null) {
                sc.push(p.right);
            }
            if (p.left != null) {
                sc.push(p.left);
            }
        }
        return ans;
    }
}
**-----------------------分割线-------------------------**

94.二叉树的中序遍历[https://leetcode.cn/problems/binary-tree-inorder-traversal/submissions/497799353/]
思路:栈实现的迭代遍历。我保持非空一路向左,否则出栈赋值右拐。

/**
 * 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<Integer> inorderTraversal(TreeNode root) {
        Stack<TreeNode> sc = new Stack<>();
        List<Integer> ans = new ArrayList<>();
        TreeNode p = root;
        while(p!=null || !sc.isEmpty()){
            if(p!=null){
            sc.push(p);
            p=p.left;
            }else if(p==null){
                p=sc.pop();
                ans.add(p.val);
                p=p.right;
            }
        }return ans;
}}
**-----------------------分割线-------------------------**

145.二叉树的后序遍历[https://leetcode.cn/problems/binary-tree-postorder-traversal/submissions/497800150/]
思路:二叉树的后序遍历,其实就是前序遍历的思路,当迭代遍历的前序遍历,将非空节点的左右节点进栈的顺序调换并且把结果数组reverse一下就是后序遍历结果。

/**
 * 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<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        if (root == null) {
            return ans;
        }
        Stack<TreeNode> sc = new Stack<>();
        sc.push(root);
        TreeNode p;
        while (!sc.isEmpty()) {
            p = sc.pop();
            ans.add(p.val);
            if (p.left != null) {
                sc.push(p.left);
            }
            if (p.right != null) {
                sc.push(p.right);
            }

        }
        Collections.reverse(ans);
        return ans;

    }
}
-----真的理解为什么上述结果为什么就是后序遍历结果并不难,但是我们主动很难去想到,所以我选择死记。-----

标签:right,TreeNode,val,代码,随想录,ans,sc,第十二天,left
From: https://www.cnblogs.com/cssg/p/17983220

相关文章

  • 「第一行代码」第一行Android 代码
    Android简介Android系统架构Linux内核层系统运行库层应用框架层应用层Android应用开发特色四大组件Activity:界面Service:在后台运行BroadcastReceiver:允许你的应用接收或发送来自广播消息ContentProvider:为应用程序之间共享数据提供了可能系统控件SQLite数据库......
  • 低代码开发:拖拽式可视化构建工业物联网系统
    以速度为后盾的创新是当今各种规模组织的基础。在这个持续数字化变革的时代,每个组织都必须随时准备创新。低编码就是这样的创新。Gartner预测,到2024年,65%的应用程序开发项目将依赖于低代码开发。什么是低代码?低代码(LowCode)是一种可视化的软件开发方法,通过最少的手动编码可以......
  • 【教程】混淆Dart 代码
    什么是代码混淆?代码混淆是一种将应用程序二进制文件转换为功能上等价,但人类难于阅读和理解的行为。在编译Dart代码时,混淆会隐藏函数和类的名称,并用其他符号替代每个符号,从而使攻击者难以进行逆向工程。Flutter的代码混淆功能仅在生产构建上生效。局限性请注意,混淆你的代码......
  • Dart代码混淆
    引言代码混淆是一种修改应用程序二进制文件的过程,旨在使其更难被人类理解。在Dart编程语言中,代码混淆通过隐藏函数和类名称以及替换每个符号来实现这一目的。在Flutter中,代码混淆仅适用于发布版本,并且不会影响Web应用程序。尽管代码混淆不能加密资源或防止逆向工程,但它可以通过......
  • 计算机编程中的黑魔法编程是什么?如何求解一个浮点数的平方根倒数?计算机中的浮点数是如
    原视频:没有显卡的年代,这群程序员用4行代码优化游戏最原始的求解目标:(求一个浮点数的开方的导数)浮点数在计算机中的表示形式:对数的运算法则:A为a在计算机中的表示形式(二进制表示形式):求浮点数的平方根倒数的应用场景:这个情况,直白的说就......
  • python用支持向量机回归(SVR)模型分析用电量预测电力消费|附代码数据
    全文链接:http://tecdat.cn/?p=23921最近我们被客户要求撰写关于支持向量机回归的研究报告,包括一些图形和统计输出。本文描述了训练支持向量回归模型的过程,该模型用于预测基于几个天气变量、一天中的某个小时、以及这一天是周末/假日/在家工作日还是普通工作日的用电量关于支持......
  • 第十二天:函数 function
    一、函数介绍函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分函数和shell程序区别Shell程序在子Shell中运行函数在当前Shell中运行。因此在当前Shell中,函......
  • 基于51单片机的五路红外循迹小车代码
      红外循迹小车主要通过红外传感返回的信号来控制,遇到黑线,红外传感熄灭,返回1,遇到白色部分,红外传感常亮,返回0. 先定义pwm,电机和红外。unsignedcharPWMA,PWMB,PWMC,PWMD;//定义PWMsbitENA_1=P1^1;//定义电机转速sbitENB_1=P1^0;sbitENA_2=P1^2;sb......
  • 数据结构学习中测试代码
    线性表顺序表的一些基本性质//#defineprint(x) std::cout<<x<<std::endl//#defineget(x) std::cin>>x#include<iostream>#include<fstream>usingnamespacestd;#defineInitsize100#typedefstruct{ int*data; intMaxsize,leng......
  • [代码随想录] 第十一天
    239.滑动窗口最大值[https://leetcode.cn/problems/sliding-window-maximum/submissions/497438333/]思路:滑动窗口大小为K,现在前K个数中找到Max值进入ans数组,然后开始向后遍历,每进入一个数字时先判断if(nums[i-k]==max),查看上一个max是否被滑动窗口滑出,若已滑出则在当前滑动窗口......