一、关于二叉树的重要知识点
1、任意节点的层数为其父节点层数+1
2、任意树都可以用儿子兄弟表示法表示成一颗二叉树
3、可以用数组存放二叉树节点,一般用在完全二叉树中,而且插入删除操作不多
4、完全二叉树任意结点的左(右)孩子为2*i(2*i+1,i=1.....)
5、知道某个结点编号i,那么他的父结点编号为i/2向下取整。
二、二叉树的遍历方式
先序、中序、后序、层序。其中先中后序遍历又可以分为递归和非递归方式实现。
思考:如何在已知先序和中序序列情况下,编程实现重建这颗二叉树。
三、理解 二叉树的遍历的本质是将树的二维结构一位线性化的过程。
四、BST的常见操作
1、查找
2、插入
3、删除
其中删除操作最复杂,伪代码如下:
BinTree* DelBST(BinTree*BST,ElmentType x)
{
if(BST ==NULL)
{
return NULL;
}
if(x>BST->data)
BST->right=DelBST(BST->right,x);
else if(x<BST->data)
BST->left=DelBST(BST->left,x);
else{
if(BST->right&&BST->left) /*左右孩子都存在的情况转化为单个孩子的删除情况,通过查找右子树的最小值来实现*/
{
Temp=FindMin(BST->right);
BST->data=Temp->data;
BST->right=DelBST(BST->right,BST->data);
}else if(!BST->left)
{
Temp=BST;
BST=BST->right;/*只存在右子树的情况下,需要将右孩子的值替代当前的结点值返回给其爷爷结点*/
free(Temp);
}else if(!BST->right)
{
Temp=BST;
BST=BST->left;
free(Temp);
}
}
return BST;
}
五、AVL树