二叉树的前序遍历
思想:主要会用到数据结构 stack, 不说废话,直接上代码;
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def preorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] stack = [] result = [] stack.append(root) while(len(stack) > 0): node = stack.pop() result.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return result
二叉树的中序遍历
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] stack = [] result = [] node = root while node or (len(stack) > 0): if node: stack.append(node) node = node.left else: node = stack.pop() result.append(node.val) node = node.right return result
二叉树的后序遍历
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def postorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] stack1 = [] stack2 = [] result = [] stack1.append(root) while len(stack1) > 0: node = stack1.pop() stack2.append(node) if node.left: stack1.append(node.left) if node.right: stack1.append(node.right) while(len(stack2) > 0): top = stack2.pop() result.append(top.val) return result