Hard-题目19:99. Recover Binary Search Tree

针对二叉排序树上两个被错误交换的节点,本文介绍了一种使用O(1)空间复杂度进行修复的方法。通过中序遍历检测并记录节点交换情况,最终实现节点值的正确恢复。

题目原文:
Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?
题目大意:
二叉排序树上的两个节点互换位置了。你能用O(1)的空间复杂度把这两个节点恢复过来吗?
题目分析:
抓住二叉排序树的重要性质——中序遍历递增来解决此题。中序遍历这棵树,如果发现了gap(当前节点比前驱节点值小)则记录下来,要分两种情况,如果gap为1个,就是相邻的两个节点互换了,如果为两个,就是第一个gap的左节点和第二个gap的右节点互换了,分别记录一下互换的节点就好了,每次用一个类成员变量记录上次访问的节点,故空间复杂度为O(1).
源码:(language:java)

public class Solution {
    //private LinkedList<TreeNode> trace = new LinkedList<TreeNode>();
    private int gap = 0;
    private TreeNode lastvisit,node1,node2;
    public void recoverTree(TreeNode root) {
        if(root!=null) {
            inOrderVisit(root);
        }
        int temp = node1.val;
        node1.val = node2.val;
        node2.val = temp;
    }
    private void inOrderVisit(TreeNode root) {
        if(root!=null) {            
            inOrderVisit(root.left);
            if(lastvisit!=null && root.val<lastvisit.val) {
                if(gap == 0) 
                    node1 = lastvisit;  
                node2 = root;
                gap++;
            }
            lastvisit = root;
            inOrderVisit(root.right);
        }       
    }
}

成绩:
4ms,beats 42.88%,众数4ms,54.80%
Cmershen的碎碎念:
本学妹不是很清楚,二叉树递归算O(logn)空间复杂度吗?

内容概要:本文档详细介绍了UC25IQ64型号的64M-bit串行多I/O闪存芯片的技术规格与操作特性。该芯片支持标准SPI、Dual/Quad SPI以及QPI接口,具备多种高性能数据传输模式,包括最高达532Mbits/s的Quad I/O数据传输速率。文档涵盖了器件的引脚定义、存储结构、工作模式、命令集、状态寄存器配置、数据保护机制、电气特性和封装信息,重点描述了各种读写、擦除、编程指令的操作流程与时序要求,并提供了详细的AC/DC参数表和封装尺寸。此外,还介绍了低功耗管理模式、安全特性如唯一ID和安全寄存器、以及高级功能如连续读取模式和双倍传输速率(DTR)等。; 适合人群:电子工程技术人员、嵌入式系统开发者、硬件设计工程师以及从事存储器应用开发的相关专业人员。; 使用场景及目标:①用于需要高可靠性、低功耗、高速数据访问的嵌入式系统中作为程序或数据存储介质;②适用于工业控制、物联网设备、消费类电子产品等领域中的代码执行(XIP)和数据存储需求;③支持多种SPI模式和QPI协议,便于在不同主控平台上进行灵活集成与优化性能。; 其他说明:本产品为南京优存科技有限公司出品,具备10万次编程/擦除周期和20年以上数据保持能力,工作电压范围为2.7V至3.6V,无需额外高压编程电源。建议用户在设计时参考完整的电气特性与时序图表,确保信号完整性与稳定性。更多技术支持请联系厂家提供的联系方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值