二叉树的统一迭代法
1.前序遍历(中左右)
result数组就是最终结果集。
将访问的节点直接加入到栈中,但如果是处理的节点则后面放入一个空节点, 这样只有空节点弹出的时候,才将下一个节点放进结果集。
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
result=[]
stack=[]
if root:
stack.append(root)
while stack:
node=stack.pop()
if node!=None:
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
stack.append(node)
stack.append(None)
else:
node=stack.pop()
result.append(node.val)
return result
2.中序遍历(左中右)
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
result=[]
stack=[]
if root:
stack.append(root)
while stack:
node=stack.pop()
if node!=None:
if node.right:
stack.append(node.right)
stack.append(node)
stack.append(None)
if node.left:
stack.append(node.left)
else:
node=stack.pop()
result.append(node.val)
return result
3.后序遍历(左右中)
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack=[]
result=[]
if root:
stack.append(root)
while stack:
node=stack.pop()
if node!=None:
stack.append(node)
stack.append(None)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
else:
node=stack.pop()
result.append(node.val)
return result