最近看面经,基本只要考了递归一定会follow up一道非递归的算法。所以我写了一下。
主要思想是构造一个栈一直将左子树压栈,并每次读取一个 node 出栈,直到没有左子树 再看右边,依次循环 直到结束。
先看递归的方法。
def preorder(root):
if root:
print root.val
preorder(root.left)
preorder(root.right)
对比非递归的方法是
def preorder(root):
if root==None:
return
stack=[]
stack.append(root)
while len(stack)>0:
node=stack[-1]
stack.pop()
print node.val
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)