二叉树遍历
二叉树节点的定义
# simple版本,自己常用class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = None# leetcode版本class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right
构建二叉树
def create_binary_tree(input_list=[]):if input_list is None or len(input_list)==0:return Nonedata = input_list.pop(0)if data is None:return Nonenode = TreeNode(data)node.left = create_binary_tree(input_list)node.right = create_binary_tree(input_list)return node
深度优先遍历
144. 二叉树的前序遍历
94. 二叉树的中序遍历
145. 二叉树的后序遍历
# 前序遍历def preorder(root):if root is None:returnprint(root.val) # 根preorder(root.left) # 左preorder(root.right) # 右return root# 中序遍历def inorder(root):if root is None:returninorder(root.left) # 左print(root.val) # 根inorder(root.right) # 右return root# 后序遍历def postorder(root):if root is None:returnpostorder(root.left) # 左postorder(root.right) # 右print(root.val) # 根return root
广度优先遍历
# 层序遍历from queue import Queuedef levelOrder(root):if not root:return []queue = Queue()queue.put(root)ans = []while not queue.empty():tmp = []n = queue.qsize()for _ in range(n):root = queue.get()tmp.append(root.val)if root.left:queue.put(root.left)if root.right:queue.put(root.right)ans.append(tmp)return ans
N叉树遍历
N叉树节点的定义
class Node:def __init__(self, val=None, children=None):self.val = valself.children = children
深度优先遍历
# 前序遍历def preorder(root):if root is None:returnprint(root.val) # 父for node in root.children: # 子preorder(node)return root# 后序遍历def postorder(root):if root is None:returnfor node in root.children: # 子postorder(node)print(root.val) # 父return root
广度优先遍历
# 层序遍历from queue import Queuedef levelOrder(root):if not root:return []queue = Queue()queue.put(root)ans = []while not queue.empty():tmp = []n = queue.qsize()for _ in range(n):root = queue.get()tmp.append(root.val)for node in root.children:queue.put(node)ans.append(tmp)return ans
