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

宁波手机网站建设莞城区网站建设公司

宁波手机网站建设,莞城区网站建设公司,鲜花网站建设的项目介绍,正规的网站建设公leetcode刷题 | 关于二叉树的题型总结3 文章目录leetcode刷题 | 关于二叉树的题型总结3题目连接递增顺序搜索树二叉搜索树中的中序后继把二叉搜索树转换为累加树二叉搜索树迭代器题目连接 897. 递增顺序搜索树 - 力扣(LeetCode) 剑指 Offer II 053. 二…

leetcode刷题 | 关于二叉树的题型总结3

文章目录

  • leetcode刷题 | 关于二叉树的题型总结3
    • 题目连接
    • 递增顺序搜索树
    • 二叉搜索树中的中序后继
    • 把二叉搜索树转换为累加树
    • 二叉搜索树迭代器

题目连接

897. 递增顺序搜索树 - 力扣(LeetCode)

剑指 Offer II 053. 二叉搜索树中的中序后继 - 力扣(LeetCode)

538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

173. 二叉搜索树迭代器 - 力扣(LeetCode)

递增顺序搜索树

二叉树本身是有序的,可以采用左中右的遍历顺序,使用一个prev节点保存前一个结点

class Solution {TreeNode prev = new TreeNode(-1);TreeNode node = prev;public TreeNode increasingBST(TreeNode root) {dfs(root);return node.right;}public void dfs(TreeNode root){if(root == null) return ;dfs(root.left);prev.right = root;root.left = null;prev = root;dfs(root.right);}
}

二叉搜索树中的中序后继

dfs+中序遍历

class Solution {TreeNode res = null;public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {dfs(root,p);return res;}public TreeNode dfs(TreeNode root,TreeNode p){if(root == null) return null;if(root.val > p.val){res = root;return inorderSuccessor(root.left,p);}else return inorderSuccessor(root.right,p);}
}

使用二分查找到找到cur=p的节点,使用prev记录cur的root节点

然后判断cur节点是否有右子树,如果存在则返会右子树的最左边的节点

如果没有右子树那么直接返会prev,因为pre > cur = p

class Solution {   public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {TreeNode cur = root;TreeNode prev = null;while(cur != p){if(cur.val > p.val){prev = cur;cur = cur.left;}else{cur = cur.right;}}  if(cur.right != null){cur = cur.right;while(cur.left != null){cur = cur.left;}return cur;}return prev;}
}

把二叉搜索树转换为累加树

class Solution {int sum = 0;public TreeNode convertBST(TreeNode root) {if(root == null) return null;convertBST(root.right);root.val += sum; //将当前节点值和大于当前节点值的和相加sum = root.val; convertBST(root.left);return root;}  
}

使用右中左逆序中序遍历的方式并使用栈来存放前一个节点

当cur=null时遍历到了叶子节点,dep.poll() 得到该节点的父节点,将cur = 该父节点

更新cur父节点的val值,题目要求值等于原树中大于或等于 node.val 的值之和,使用sum来保存和

因为使用右中左的遍历顺序,sum始终都是累加

class Solution {public TreeNode convertBST(TreeNode root) {int sum = 0;Deque<TreeNode> deq = new ArrayDeque();      TreeNode cur = root;while(!deq.isEmpty() || cur != null){if(cur != null){deq.push(cur);cur = cur.right;}else{cur = deq.poll();sum += cur.val;cur.val = sum;cur = cur.left;}}return root;}
}

二叉搜索树迭代器

先获得中序遍历结果,然后遍历

class BSTIterator {List<TreeNode> list = null;int index;int siez;public BSTIterator(TreeNode root) {list = new ArrayList<>();index = -1;dfs(root);this.siez = list.size();}public int next() {return list.get(++index).val;}public boolean hasNext() {if (index >= siez-1) return false;return true;}public void dfs(TreeNode root){if (root == null) return ;dfs(root.left);list.add(root);dfs(root.right);}
}

使用栈存入全部的左子节点和根节点

class BSTIterator {Deque<TreeNode> deq = new ArrayDeque<>();public BSTIterator(TreeNode root) {TreeNode node  = root;while (node != null){deq.push(node);node = node.left;}}public int next() {TreeNode cur = deq.poll();if(cur.right != null){TreeNode node = cur.right;while(node != null){deq.push(node);node = node.left;//把所有的左节点都放入deq}}return cur.val;}public boolean hasNext() {return !deq.isEmpty();}
}
http://www.yayakq.cn/news/974452/

相关文章:

  • 网站域名空间合同网站建网站建设专业
  • 网站建设公司行业描述填什么智能云建站平台
  • 数据库和网站建设的论文泰安集团网站建设报价
  • 学习网站开发技术内江市住房和城乡建设局网站电话
  • 网站开发用什么笔记本seo教程之关键词是什么
  • 西宁专业做网站的玩具 东莞网站建设 技术支持
  • 个人网站咋推广啥叫流量怎么给网站做网站地图
  • 企业网站模板下载哪家公司强媒体网络推广价格优惠
  • 知名网站定制公司电话门户网站建设专业
  • 全国学校网站建设口碑营销案例2021
  • 教做糕点的视频网站做网站找华企
  • 中企动力做网站5个月了目前做响应式网站最好的cms
  • wordpress网站域名服务器江苏建设网证书查询
  • 江门提供网站制作平台苏州企业网站建设公司只选亿企邦
  • 怎么在濮阳网站做宣传湖南营销型网站建设公司排名
  • 网站 宣传方案网站信息化建设存在的困难
  • 郑州网站制路由器安装wordpress
  • 河北网站优化公司杭州房产网签流程
  • 网站建设需要注意的关键细节wordpress网站专题
  • 做网站的环境配置快速网站建设哪家好
  • 肇庆企业做网站大连旅游必去景点
  • 抖音小程序暴利玩法网站做seo需要些什么
  • 哪里找专业做网站的人网站建设的规划和流程
  • 网站做哪块简单怎么注册wordpress账号
  • 甘肃建设监理协会网站企业年金可以取出来吗
  • 杭州微网站开发公司最新黑帽seo培训
  • 营销策略的概念优化推广服务
  • 能不能用自己的主机做网站天猫店铺购买
  • 中原区网站建设国外的自建网站怎么做
  • 网站备案信息查询系统常州知名网站公司