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

leetcode 173.二叉搜索树迭代器栈绝妙思路

在这里插入图片描述
以上算法题中一个比较好的实现思路就是利用栈来进行实现,以下方法三就是利用来进行实现的,思路很好,很简练。进行next的时候,先是一直拿到左边的子树,直到null为止,这一步比较好思考一点,下一步,弹出时,只修改cur节点即可,总之要明白while循环中cur变量代表什么含义,在循环结束时可以为cur更好的赋值。此处的cur就代表传入一个节点,就可以根据这个节点为根实现中序遍历。因此,当进行右子树时,直接将这个右子树赋值给cur即可进行下一轮次的循环。所以,在利用while循环时,要注重循环变量代表什么含义才能够更好的写出优雅的算法来。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/// 方法三,利用栈来进行模拟
class BSTIterator {private TreeNode cur;private Deque<TreeNode> stack;  // 双向队列,可以模拟栈public BSTIterator(TreeNode root) {this.cur = root;this.stack = new LinkedList();}public int next() {// 以下利用栈思路很好while(cur != null){stack.push(cur);cur = cur.left;}TreeNode node = stack.pop();cur = node.right;return node.val;}public boolean hasNext() {return cur != null || !stack.isEmpty();}
}// 方法二:提前遍历
// class BSTIterator {
//     List<TreeNode> lists = new LinkedList();
//     private int index = 0;//     public BSTIterator(TreeNode root) {
//         preOrder(root);
//     }//     public int next() {
//         return lists.get(index++).val;
//     }//     public boolean hasNext() {
//         return index < lists.size();
//     }//     public void preOrder(TreeNode root){
//         if(root != null){
//             preOrder(root.left);
//             lists.add(root);
//             preOrder(root.right);
//         }
//     }// }// 方法一:难点是如何让root 移动到下一个结点处
// class BSTIterator {
//     private TreeNode root;//     public BSTIterator(TreeNode root) {
//         this.root = root;
//     }//     public int next() {
//         int value = root.val;
//         // root 移动到下一个结点处
//         return value;
//     }//     public boolean hasNext() {
//         return root != null;
//     }
// }/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator obj = new BSTIterator(root);* int param_1 = obj.next();* boolean param_2 = obj.hasNext();*/
http://www.lryc.cn/news/514851.html

相关文章:

  • df.groupby([pd.Grouper(freq=‘1M‘, key=‘Date‘), ‘Buyer‘]).sum()
  • LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 (4)
  • icp备案网站个人备案与企业备案的区别
  • 如何不修改模型参数来强化大语言模型 (LLM) 能力?
  • AF3 AtomAttentionEncoder类的init_pair_repr方法解读
  • DDoS攻击防御方案大全
  • Vue中常用指令
  • Servlet解析
  • 带虚继承的类对象模型
  • 深度学习中的离群值
  • 如何利用Logo设计免费生成器创建专业级Logo
  • Mysql SQL 超实用的7个日期算术运算实例(10k)
  • 运算指令(PLC)
  • 「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏
  • 机器学习经典算法——逻辑回归
  • 【数据仓库金典面试题】—— 包含详细解答
  • 【UE5 C++课程系列笔记】19——通过GConfig读写.ini文件
  • JS 中 json数据 与 base64、ArrayBuffer之间转换
  • USB 驱动开发 --- Gadget 驱动框架梳理
  • 细说STM32F407单片机中断方式CAN通信
  • Python应用指南:高德交通态势数据
  • 医学图像分析工具01:FreeSurfer || Recon -all 全流程MRI皮质表面重建
  • .NET框架用C#实现PDF转HTML
  • mamba-ssm安装
  • 网络IP协议
  • 双指针算法详解
  • MySQL的最左匹配原则是什么
  • LeetCode:106.从中序与后序遍历序列构造二叉树
  • 22. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--切换主币种
  • 01.02周四F34-Day43打卡