【Leetcode刷题篇】leetcode99 恢复二叉搜索树
发布日期:2021-06-29 15:33:28
浏览次数:2
分类:技术文章
本文共 1022 字,大约阅读时间需要 3 分钟。
题目:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。
进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?
解题思路一、对其中序遍历存储其所有结点的值,对其中的值进行遍历,存储器异常值,对树进行遍历,找到异常值,并进行替换。
public void recoverTree(TreeNode root) { Listnums = new ArrayList<>(); inorder(root,nums); // 获取不正确的两个位置 int[] swapped = findTwoSwapped(nums); recover(root,2,swapped[0],swapped[1]); } // 中序遍历获取结果 public void inorder(TreeNode root,List nums) { if(root==null) { return; } inorder(root.left,nums); nums.add(root.val); inorder(root.right,nums); } // 获得中序遍历不确定的两个位置 public int[] findTwoSwapped(List nums) { int n = nums.size(); int x = -1,y=-1;; for(int i=0;i
题解二、中序遍历的隐式遍历过程中寻找其异常值。
// 二叉搜索树的隐式恢复 public void recoverTree_2(TreeNode root) { Stackstack = new Stack<>(); TreeNode x = null, y = null, pred= null; while(!stack.isEmpty()||root!=null) { while(root!=null) { stack.push(root); root = root.left; } root = stack.pop(); if(pred!=null&&root.val
转载地址:https://codingchaozhang.blog.csdn.net/article/details/109499745 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月13日 14时17分49秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于http搭建本地yum仓库
2019-04-29
常规邮件基础
2019-04-29
邮件基础之 -- SMTP协议
2019-04-29
网络基础
2019-04-29
Java设计模式--责任链模式
2019-04-29
OpenCV的cvLoadImage函数
2019-04-29
OpenCV中与matlab中相对应的函数
2019-04-29
C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
2019-04-29
cvGetSubRect与cvMul用法
2019-04-29
opencv图像处理梯度边缘和角点
2019-04-29
Caffe源码中blob文件分析
2019-04-29
OpenCV 图像采样 插值 几何变换
2019-04-29
图像处理-仿射变换 AffineTransform
2019-04-29
图像二值化----otsu(最大类间方差法、大津算法)
2019-04-29
图像二值化----otsu(最大类间方差法、大津算法)(二)
2019-04-29
OpenCV编程案例:使用轮廓函数检测连通区域
2019-04-29
opencv使用cvFindContours提取联通域
2019-04-29
C++中MessageBox的常见用法
2019-04-29
ordfilt2函数功能说明
2019-04-29
在图像变换中用最小二乘法求解仿射变换参数
2019-04-29