ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【初赛】二叉树性质和遍历 - Slayer

【初赛】二叉树性质和遍历 - Slayer

二叉树的性质与遍历

一、二叉树的基本性质

1. 定义

二叉树是每个节点最多有两个子树的树结构,子树分为左子树和右子树,具有顺序性

2. 关键性质
  • 性质1:在非空二叉树中,第 \(i\) 层最多有 \(2^{i-1}个\)节点
  • 性质2:深度为k的二叉树最多有 \(2^k - 1\) 个节点
  • 性质3:对任何一棵非空二叉树,若叶子节点数为 \(n_0\),度为 2 的节点数为 \(n₂\),则 \(n_0 = n_2 + 1\)
  • 性质4:具有 n 个节点的完全二叉树深度为\(\lfloor \log_2 n\rfloor + 1\)
  • 性质5:完全二叉树中节点编号规律(根节点编号为1):
    • 若节点 i 有左孩子,则左孩子编号为 \(2i\)
    • 若节点 i 有右孩子,则右孩子编号为 \(2i+1\)
    • 若节点 i 有父节点,则父节点编号为 \(\lfloor \frac{i}{2} \rfloor\)

二、二叉树的遍历方式

1. 深度优先遍历(DFS)
  • 前序遍历(根 - 左 - 右)
  • 中序遍历(左 - 根 - 右)
  • 后序遍历(左 - 右 - 根)
2. 广度优先遍历(BFS)- 层次遍历

遍历顺序:按层次依次访问各节点,同一层次从左到右

bfs(s) {q = new queue()q.push(s), visited[s] = truewhile (!q.empty()) {u = q.pop()for each edge(u, v) {if (!visited[v]) {q.push(v)visited[v] = true}}}
}
返回列表