[关闭]
@markheng 2018-08-02T02:56:17.000000Z 字数 508 阅读 1369

Binary Search Tree Iterator - LeetCode

算法


中序遍历,用栈保存需要回溯的节点的列表,这个列表最大为树的高度h,所以空间复杂度为O(h)

  1. class BSTIterator {
  2. public:
  3. vector<TreeNode*> vec;
  4. BSTIterator(TreeNode *root) {
  5. while(root)
  6. {
  7. vec.push_back(root);
  8. root = root -> left;
  9. }
  10. }
  11. /** @return whether we have a next smallest number */
  12. bool hasNext() {
  13. return !vec.empty();
  14. }
  15. /** @return the next smallest number */
  16. int next() {
  17. TreeNode *cur = vec.back(); vec.pop_back(); //回溯
  18. int ret = cur -> val;
  19. if(cur->right) // 被回溯的节点有右子树,那么就将右孩子到右子树最左节点路径的节点全部压栈
  20. {
  21. cur = cur -> right;
  22. while(cur)
  23. {
  24. vec.push_back(cur);
  25. cur = cur->left;
  26. }
  27. }
  28. return ret;
  29. }
  30. };
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注