数据结构-二叉树
概念
- 是一棵树
- 每个节点,最多只能有 2 个子节点
- 树节点的数据结构
{value, left?, right?}
ts
interface ITreeNode {
value: number;
left: ITreeNode | null;
right: ITreeNode | null;
}
三种遍历
ts
/**
* 5
* / \
* 3 7
* / \ /\
* 2 4 6 8
*/
const tree: ITreeNode = {
value: 5,
left: {
value: 3,
left: {
value: 2,
left: null,
right: null,
},
right: {
value: 4,
left: null,
right: null,
},
},
right: {
value: 7,
left: {
value: 6,
left: null,
right: null,
},
right: {
value: 8,
left: null,
right: null,
},
},
};
- 前序遍历:
**root**->left->right
- 中序遍历:
left->**root**->right
- 后序遍历:
left->right->**root**
ts
// 前序遍历
function proOrderTraverse(node: ITreeNode | null) {
if (node == null) return;
console.log(node.value);
proOrderTraverse(node.left);
proOrderTraverse(node.right);
}
// 测试
// proOrderTraverse(tree)
// 中序遍历
function inOrderTraverse(node: ITreeNode | null) {
if (node == null) return;
inOrderTraverse(node.left);
console.log(node.value);
inOrderTraverse(node.right);
}
// 测试
// inOrderTraverse(tree)
// 后序遍历
function postOrderTraverse(node: ITreeNode | null) {
if (node == null) return;
postOrderTraverse(node.right);
postOrderTraverse(node.left);
console.log(node.value);
}
// 测试
postOrderTraverse(tree);
二叉搜索树
- left(包括其后代)
value <= root value
- right(包括其后代)
value >= root value
- 可以使用 二分法 进行快速查找
js
/**
* 5
* / \
* 3 7
* / \ /\
* 2 4 6 8
*/