二叉树算法
什么是二叉树
树描述的是节点之间的父子关系,如图所示,叶子节点是节点的子级,而子节点是根节点的子级
二叉树有三个维度:高度,深度,层级

二叉树分为三种分类:普通二叉树,完全二叉树,满二叉树

二叉树遍历的方法:
- 前序遍历:根节点->左子树->右子树
- 中序遍历:左子树->根节点->右子树
- 后序遍历:左子树->右子树->根节点
如图所示,三种遍历方式

练习题
-
94:中序遍历
-
144:前序遍历

解法一
解题思路
使用迭代的方式,这里需要模拟一个栈用来存储每一个节点
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
stack = []
res = []
if not root:
return res
while stack or root:
while root:
res.append(root.val)
stack.append(root)
root = root.left
root = stack.pop()
root = root.right
return res
解法二
解题思路
使用递归的方式,和迭代是等价的,只不过递归会隐形维护一个栈做节点记录
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
arr = []
def flow_node(root):
if not root:
return
arr.append(root.val)
flow_node(root.left)
flow_node(root.right)
flow_node(root)
return arr
- 145:后序遍历

浙公网安备 33010602011771号