当前位置: 首页 > news >正文

贵城乡建设官方网站江都建设招标网站

贵城乡建设官方网站,江都建设招标网站,哈尔滨模板网站建设,1688电影网入口从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 99. 恢复二叉搜索树 给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 示例 1: 输入…

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结

99. 恢复二叉搜索树

给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。

示例 1:

在这里插入图片描述

输入:root = [1,3,null,null,2]
输出:[3,1,null,null,2]
解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。

示例 2:
在这里插入图片描述

输入:root = [3,1,4,null,null,2]
输出:[2,1,4,null,null,3]
解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。

提示:
树上节点的数目在范围 [2, 1000] 内
−231-2^{31}231 <= Node.val <= 231−12^{31} - 12311

进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用 O(1) 空间的解决方案吗?

思路
因为只有两个节点错误,所以只要找出这两个节点然后交换值即可。

BST中序遍历是升序结果,因此进行中序遍历,使用三个指针指示节点,cur为当前节点,pre为当前节点之前的节点,wrongNode为错误节点

当当前节点小于上一个节点时,上一个节点pre就是第一个错误节点,用wrongNode记录,然后继续遍历,找出第二个错误节点, 这里有两种情况:

1.当当前节点大于wrongNode时,它的前节点就是第二个错误节点,如[1,3,2,4],错误节点分别为3、2

2.遍历结束时仍然没有节点大于wrongNode,则最后一个节点就是错误节点,如[3,1,2],错误节点为3、2

public void recoverTree(TreeNode root) {if (root == null) return;Stack<TreeNode> stack = new Stack<>();TreeNode pre = null, cur = root, wrongNode = null;while (!stack.isEmpty() || cur != null) {if (cur != null) {stack.add(cur);cur = cur.left;} else {cur = stack.pop();//与上一个节点比较,找到错误节点if (wrongNode == null && pre != null && cur.val < pre.val) {wrongNode = pre;}//表示当前节点是否大于wrongNodeif (wrongNode != null && cur.val > wrongNode.val) {swap(pre, wrongNode);break;}pre = cur;cur = cur.right;}}//如果没有节点大于wrongNode,与最后一个节点交换值if (wrongNode != null && wrongNode.val > pre.val) {swap(pre, wrongNode);}
}private void swap(TreeNode pre, TreeNode wrongNode) {int tmp = pre.val;pre.val = wrongNode.val;wrongNode.val = tmp;
}
http://www.yayakq.cn/news/696002/

相关文章:

  • 谷歌网站管理员账号做网站与做app哪个容易
  • 福州网站建设推广公司深圳专业做网站建网站价格
  • 如何搭建o2o网站专业的购物网站建设
  • 模版网站建设网站需要的编程
  • 哪个网站买做房图纸好摄图网的图片可以做网站吗
  • 哪个网站可以做头像的外贸网站建设网络公司
  • 重庆做网站建设公司哪家好游戏源代码交易平台
  • 做菠菜网站判多久wordpress如何链接
  • 找公司网站建设3无锡seo网站建设费用
  • 精湛的佛山网站设计网站维护是什么
  • 湛江企业建站程序扫黄打非网站建设
  • 沈阳商城网站开发网络营销方式文献
  • 武穴市网站两学一做品牌做网站
  • 灰色行业推广平台网站上海企业公示信息查询系统
  • 在线做插画的网站html仿百度页面代码
  • 广州企业网站模板购买正规网站制作公司哪里有
  • 设计网站最重要的是要有良好的网站建设宣传视频教程
  • 新公司怎么建立自己的网站京东购物官网免费下载
  • 网站开发建设成本游戏秒玩网站
  • 网站后期技术维护住建部建设工程施工合同范本
  • 免费自助建站哪个平台好重庆建筑工程
  • 漂亮的网站框架工作手机
  • 微信菜单栏那些网站怎么做淘客网站app建设
  • 网站怎么访问自己做的网页广东省住建厅官方网站
  • 网站服务公司哪个好莆田外贸网站建设
  • 域名买完了网站建设我的家乡湛江网站设计
  • 腾讯网站建设费用北京网页设计公司网站
  • 北京市住房城乡建设官方网站招商网站大全
  • linux 网站建设如何推广一款app
  • 花店做网单的网站桂林临桂区建设局网站