2022-8-19 剑指offer-二叉树-递归

剑指 Offer II 055. 二叉搜索树迭代器

难度中等

实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:

  • BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。
  • boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。
  • int next()将指针向右移动,然后返回指针处的数字。

注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。

可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode() {}
 8  *     TreeNode(int val) { this.val = val; }
 9  *     TreeNode(int val, TreeNode left, TreeNode right) {
10  *         this.val = val;
11  *         this.left = left;
12  *         this.right = right;
13  *     }
14  * }
15  */
16 class BSTIterator {
17     List<TreeNode> list;
18     int index=-1;
19     public BSTIterator(TreeNode root) {
20         list=new ArrayList<>();
21         inorder(root);
22     }
23     
24     public int next() {
25         return list.get(++index).val;
26     }
27     
28     public boolean hasNext() {
29         return index<list.size()-1;
30     }
31 
32     public void inorder(TreeNode root){
33         if (root==null) return;
34         inorder(root.left);
35         list.add(root);
36         inorder(root.right);
37     }
38 }
39 
40 /**
41  * Your BSTIterator object will be instantiated and called as such:
42  * BSTIterator obj = new BSTIterator(root);
43  * int param_1 = obj.next();
44  * boolean param_2 = obj.hasNext();
45  */

思路 :递归实现中序遍历,也可以用栈实现中序遍历。

posted on 2022-08-19 10:46  阿ming  阅读(10)  评论(0编辑  收藏  举报

导航