1
2
3
|
n0+n1+n2-1 = 0*n0+1*n1+2*n2
n0 = n2+1
|
分类
|
完全二叉树 |
满二叉树 |
描述 |
除了最后一层其余都是满的。 |
满足最多的节点数。 |
树高 |
$h = lgk +1$ |
$h = lg(k + 1)$ |
节点数 |
$2^{h-1} \le k \le 2^h - 1$ |
$2^h -1$ |
应用
二叉树可以实现二叉树和二叉搜索树,用于排序和搜索。
- 二叉堆(Binary Heap):一棵完全二叉树,并且父节点的值都大于等于子节点的值。
- 二叉搜索树(BST):
symmetric order
的二叉树,即左子树的全部值 < 父节点 < 右子树的全部值
。
二叉树的遍历
二叉树的遍历用递归实现代码十分简介,因为树结构就是递归定义的。
前序遍历
根节点 -> 左孩子 -> 右孩子
1
2
3
4
5
6
7
8
|
private void preOrder(TreeNode root) {
if (root == null) {
return;
}
preOrderList.add(root);
preOrder(root.left);
preOrder(root.right);
}
|
中序遍历
左孩子 -> 根节点 -> 右孩子
1
2
3
4
5
6
7
8
|
private void inOrder(TreeNode root) {
if (root == null) {
return;
}
inOrder(root.left);
inOrderList.add(root);
inOrder(root.right);
}
|
后序遍历
左孩子 -> 右孩子 -> 根节点
1
2
3
4
5
6
7
8
|
private void postOrder(TreeNode root) {
if (root == null) {
return;
}
postOrder(root.left);
postOrder(root.right);
postOrderList.add(root);
}
|
层次遍历
1
2
3
4
5
6
7
8
9
10
11
12
|
private Queue<TreeNode> levelOrderQueue = new LinkedList<>();
private ArrayList<TreeNode> levelOrderList = new ArrayList<>();
// Just likes BFS, and preOrder, inOrder and postOrder are like DFS
private void levelOrder(TreeNode root) {
levelOrderQueue.add(root);
while (!levelOrderQueue.isEmpty()) {
TreeNode node = levelOrderQueue.poll();
levelOrderList.add(node);
if (node.left != null) levelOrderQueue.add(node.left);
if (node.right != null) levelOrderQueue.add(node.right);
}
}
|
相关面试题
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class Solution {
private boolean valid(int[] squence, int start, int end) {
if (start >= end) return true;
int p = end;
// find the left tree & valid right
while (p > start && squence[end] < squence[p - 1]) p--;
// valid left
for (int i = p - 1; i >= start; i--) {
if (squence[i] > squence[end]) return false;
}
return valid(squence, start, p - 1) && valid(squence, p, end - 1);
}
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence.length == 0) return false;
return valid(sequence, 0, sequence.length - 1);
}
}
|
参考