1.二分查找法(引例)
图示:
代码:
//二分查找法
int BinarySearch(PStaticTable PST, int x) {
int mid, right, left;
left = 1;
right = PST->length;
while (left <= right) {
mid = (left + right) / 2;
if (PST->Element[mid] < x) {
right = mid-1;
}
else if (PST->Element[mid] > x) {
left = mid+1;
}
else {
return mid;
}
}
return NULL;
}
2.树
1.一些基本术语
1.节点的度:节点子树个数
2.树的度:树中所有节点中最大的度数
3.叶节点
4.父节点
5.子节点
6.兄弟节点
7.路径和路径长度:路径是指所包含的节点,路径长度是指所包含的边数
8.节点的层级:根节点的层次是0,其他各节点是其父节点+1
9.树的深度:这棵树上最大的层次
10.树的高度:叶子节点的高度为0,其父节点的高度为子节点+1
2.二叉树的表示:
typedef struct TNode* Position;
typedef Position BinTree;
struct TNode {
ElementType Data;
BinTree left;
BinTree right;
};
几种特殊二叉树
1.斜二叉树
2.完全二叉树
3.完美二叉树(满二叉树)
3.二叉树的遍历:
1.前序遍历
void PreOrderTraversal(BinTree BT) {
while (BT) {
cout << BT->Date;
PreOrderTraversal(BT->left);
PreOrderTraversal(BT->right);
}
}
2中序遍历
void OrderTraversal(BinTree BT) {
while (BT) {
PreOrderTraversal(BT->left);
cout << BT->Date;
PreOrderTraversal(BT->right);
}
}
(中序遍历非递归方式,利用堆栈)
3.后序遍历
void PostOrderTraversal(BinTree BT) {
while (BT) {
PreOrderTraversal(BT->left);
PreOrderTraversal(BT->right)