二叉树的概念与结构
二叉树是一种树形数据结构,由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。每个节点存储一个值,并且可能没有子节点。二叉树具有以下性质:
- 每个节点最多有两个子节点。
- 左子节点与右子节点的顺序是固定的。
- 二叉树的查找、插入和删除效率较高
层次遍历
前置知识:使用一个数组实现队列
遍历的过程描述:
- 首先根节点A加入队列
- A出队列对依次加入左节点B和右节点C
- B出队列时加入左节点D和右节点E
- C出队列是加入左节点F和右节点G
- 直到队列中为空、遍历结束
其层次遍历的结果:A B C D E F G
代码实现
public class LevelOrderTraversal {
// 二叉树结构体
public static class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
}
// 根据题目的最大范围进行取值
public static int MAXN = 2001;
// 使用数组实现队列
public static TreeNode[] queue = new TreeNode[MAXN];
public static int l, r;
public static List<List<Integer>> levelOrder2(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root != null) {
l = r = 0;
// 从数组的右边加入根节点 并且右指针往右移动
queue[r++] = root;
while (l < r) { // 队列里还有东西
int size = r - l;
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < size; i++) {
// 从数组的左边出队列
TreeNode cur = queue[l++];
list.add(cur.val);
if (cur.left != null) {
queue[r++] = cur.left;
}
if (cur.right != null) {
queue[r++] = cur.right;
}
}
ans.add(list);
}
}
return ans;
}
}