# CSPT 19 Lecture 9
## Traversals
```
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
res = []
self.postorderTraversalHelper(root, res)
return res
def postorderTraversalHelper(self, currNode, res):
if currNode == None:
return
if currNode.left != None:
self.postorderTraversalHelper(currNode.left, res)
if currNode.right != None:
self.postorderTraversalHelper(currNode.right, res)
res.append(currNode.val)
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = []
self.inorderTraversalHelper(root, res)
return res
def inorderTraversalHelper(self, currNode, res):
if currNode == None:
return
if currNode.left != None:
self.inorderTraversalHelper(currNode.left, res)
res.append(currNode.val)
if currNode.right != None:
self.inorderTraversalHelper(currNode.right, res)
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
self.inorderTraversalHelper(root, res)
return res
def inorderTraversalHelper(self, currNode, res):
if currNode == None:
return
if currNode.left != None:
self.inorderTraversalHelper(currNode.left, res)
res.append(currNode.val)
if currNode.right != None:
self.inorderTraversalHelper(currNode.right, res)
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root == None:
return []
res = []
queue = deque()
queue.append([root])
while len(queue) > 0:
nodesInLevel = queue.popleft()
resultForLevel = []
nextLevel = []
for node in nodesInLevel:
resultForLevel.append(node.val)
if node.left != None:
nextLevel.append(node.left)
if node.right != None:
nextLevel.append(node.right)
if len(nextLevel) > 0:
queue.append(nextLevel)
res.append(resultForLevel)
return res
```
## [validBST](https://leetcode.com/problems/validate-binary-search-tree/)
```
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
if root == None:
return True
stack = deque()
stack.append((root, float("-inf"), float("inf")))
while len(stack) > 0:
curr = stack.pop()
currNode, currMin, currMax = curr[0], curr[1], curr[2]
if currNode.val <= currMin or currNode.val >= currMax:
return False
if currNode.left != None:
stack.append((currNode.left, currMin, currNode.val))
if currNode.right != None:
stack.append((currNode.right, currNode.val, currMax))
return True
```