前序遍历(根、左、右)
-
递归方式实现
算法:
1.如果结点为空,返回空
2.否则:打印当前结点的值->递归遍历结点的左子树->递归遍历结点的右子树
def PreOrder(node):
if node == None:
return None
else:
print(node.value)
PreOrder(node.left)
PreOrder(node.right)
-
非递归方式实现(借助栈)
算法:
1.申请空栈
2.当栈或结点都不为空时循环:
2.1 当结点不为空时:打印当前节点的值,入栈,继续遍历当前结点的左子树
2.2 当栈不为空时:弹出栈顶结点,遍历栈顶节点的右子树
def PreOrder(root):
stack = []
node = root
while node and stack:
while node:
print(node.value)
stack.append(node)
node = node.left
if stack:
node = stack.pop()
node = node.right