LeetCode 每日一题 173. 二叉搜索树迭代器
2024-11-2118
问题:
实际上的需求是:实现二叉搜索树中序遍历。
思路:
两种思路
先通过递归把中序遍历的结果保存到集合中,再通过调用相应的api进行读取。
通过引入栈数据结构,通过迭代的方式对二叉树做中序遍历。此时,我们无需预先计算出中序遍历的全部结果,只需要实时维护当前栈的情况即可。
代码:
//递归思想classBSTIterator{privateintindex;privateListIntegerresList;//先递归保存所有值,再查询publicBSTIterator(TreeNoderoot){index=0;resList=newArrayList();dfs(root,resList);}publicintnext(){(index++);}publicbooleanhasNext(){();}//递归保存所有节点到集合privatevoiddfs(TreeNoderoot,ListIntegerresList){if(root==null){return;}dfs(,resList);();dfs(,resList);}}//迭代思想classBSTIterator{privateTreeNoderoot;privateLinkedListTreeNodestack;publicBSTIterator(TreeNoderoot){=root;stack=newLinkedList();}publicintnext(){//有左值则全部入栈while(root!=null){(root);root=;}//取出栈顶元素,就是结果值root=();intresValue=;//节点变为右值判断root=;returnresValue;}publicbooleanhasNext(){//栈非空或者节点值不为空则代表还没遍历完return(!()||root!=null);}}