编程里(通过自己具体的观察从第一次到第二次、第三次观察之间的关系)

简介: 编程里(通过自己具体的观察从第一次到第二次、第三次观察之间的关系)

编程里(通过自己具体的观察从第一次到第二次、第三次观察之间的关系)


/**
* 编程里有很重要的一个思维:就是记录“第一次的结果”,然后等到走到“第二次的结果”时进行一些操作
* 可能是把第二次的结果与第一次进行比较,然后进行一些操作,
* 也可能是(比较之后)将第二次结果覆盖掉第一次结果
* 所以编程里非常重要的变量:标记变量:即记录“第一次的结果”(前一次的结果),留个“第二次的结果”(当前的结果)进行比较
*/

1、 98_验证二叉搜索树:【 https://leetcode-cn.com/problems/validate-binary-search-tree/


//中序遍历(迭代法)~ 从小到大啦(用一个变量记录前一次“第一次”,当前本次(第二次)与之对比)
//这里的记录变量是:inorder
class Solution {
    public boolean isValidBST(TreeNode root) {
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        double inorder = -Double.MAX_VALUE;
        TreeNode node = root;
        while (!stack.isEmpty() || node != null) {
            while (node != null) {
                stack.push(node);
                node = node.left;
            }
            // 即根
            node = stack.pop();
            // 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
            if (node.val <= inorder) {
                return false;
            }
            inorder = node.val;
            // 判断该点
            node = node.right;
        }
        return true;
    }
}


2、 145_二叉树的后序遍历:【https://leetcode-cn.com/problems/binary-tree-postorder-traversal/submissions/


//迭代:
    /**
 后序:【左右根】:左左左,左到不能再左了,跳出(当前结点可能是最左边的结点(是一个根(它的左是null,是它跳出的条件))),【开始找右边】:
 (1)没有右边/本次的右结点是上一次的结点,则本次是一个根(因为 左 右 根):添加根
 prev = root;    //第一次的结点,可能是下一次(根)的右结点,需要标记留个下次比较
 root = null;(不加超出内存,这是why???)
 (2)有右边(把根push回去),从右子树开始啦:(左右根)
     */
    List<Integer> list = new ArrayList<>();
    public List<Integer> postorderTraversal(TreeNode root) {
        if(root == null)    return list;
        Deque<TreeNode> stack = new LinkedList<>();
        TreeNode prev = null;
        while(!stack.isEmpty() || root != null) {
            while(root != null) {
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();
            if (root.right == null || root.right == prev) {
                list.add(root.val);
                prev = root;
                root = null;    //不加:超出内存
            } else { 
                stack.push(root);
                root = root.right;
            }
        }        
        return list;
    }


3、 114_二叉树展开为链表:【 https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/


//题意:左指针变成null,右指针指向下个结点
//记录第一个结点prevNode:
//然后 走到第二个结点currNode,让第一个结点prev 的左指针指向null,右指针 指针 第二个结点
    public void flatten2(TreeNode root) {
        if (root == null) {
            return;
        }
        Deque<TreeNode> queue = new LinkedList<TreeNode>();
        queue.push(root);
        TreeNode prev = null;
        while (!queue.isEmpty()) {
            TreeNode curr = queue.pop();
            if (prev != null) {    //通过 prev != null 判断得知:当前结点是第二个(来到了下一次)啦
                prev.left = null;
                prev.right = curr;
            }
            TreeNode left = curr.left, right = curr.right;
            if (right != null) {
                queue.push(right);
            }
            if (left != null) {
               queue.push(left);
            }
            prev = curr;    //记录第一次“前一次的结果”
        }
    }



目录
相关文章
|
4天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
7天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
413 93
|
23小时前
|
开发者
「玩透ESA」ESA启用和加速-ER在加速场景中的应用
本文介绍三种配置方法:通过“A鉴权”模板创建函数并设置触发器路由;在ESA上配置回源302跟随;以及自定义响应头。每步均配有详细截图指引,帮助开发者快速完成相关功能设置,提升服务安全性与灵活性。
267 2
|
7天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
405 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
7天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
300 158