leetcode 173. Binary Search Tree Iterator-二叉搜索树迭代器

题目链接:leetcode链接

思路:二叉搜索树的中序遍历实现。
二叉搜索树性质:

  • 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  • 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  • 任意节点的左、右子树也分别为二叉查找树;
  • 没有键值相等的节点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Definition for a  binary tree node
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class BSTIterator(object):
def __init__(self,root):
self.stack = []
self.root = root

def next(self):
while self.root:
self.stack.append(self.root)
self.root = self.root.left
self.root = self.stack.pop()
node = self.root
self.root = self.root.right
return node.val

def hasNext(self):
if self.root or len(self.stack) > 0:
return True
return False


# Your BSTIterator will be called like this:
# i, v = BSTIterator(root), []
# while i.hasNext(): v.append(i.next())