一、二叉树
二叉树特点:
1、每个结点最多有两颗子树,结点的度最大为2。
2、左子树和右子树是有顺序的,次序不能颠倒。即使某结点只有一个子树,也要区分左右子树。
查找二叉树的创建和基本二叉树的创建无差异。二叉树的清空,实际上就是后序遍历删除。
二叉树的建立与删除
typedef struct node
{
struct node *lchild;
struct node *rchild;
char data;
}BiTreeNode, *BiTree;
//*BiTree的意思是给 struct node*起了个别名,叫BiTree,故BiTree为指向节点的指针。
BiTree MakeEmpty(BiTree tree)
{
if (tree) {
MakeEmpty(tree->lchild);
MakeEmpty(tree->rchild);
free(tree);
tree = NULL;
}
return tree;
}
插入
static BiTree InsertNode(int element, BiTree tree)
{
if (tree == NULL) {
tree = (BiTree)malloc(sizeof(*tree));
if (tree == NULL) {
fprintf(stderr, "there is no space\n");
return NULL;
}
tree->data = element;
printf("tree->element is %d\n", tree->data);
tree->rchild = NULL;
tree->lchild = NULL;
}
else if (element>tree->data) {
//需要将返回值指向tree->RightNode
tree->rchild = InsertNode(element, tree->rchild);
}
else {
// 需要将返回值指向tree->LeftNode
tree->lchild = InsertNode(element, tree->lchild);
}
return tree;
}
查找最大最小值及前后结点
//查找二叉查找树中关键字最小的节点,返回指向该节点的指针
BiTree tree_minimum(BiTree root)
{
BiTree p = root;
while (p-&g