二叉树的相关操作

二叉树的数据结构

typedef char SearchTreeType; 

typedef struct SearchTreeNode
{ 
    SearchTreeType key; // 关键码 
    struct SearchTreeNode* lchild; 
    struct SearchTreeNode* rchild; 
} SearchTreeNode; 

二叉树的初始化

由于我们是用一个指向根节点的指针表示一个二叉树, 所以初始化的时候就是让这个指针指向空, 表示一个空树

void SearchTreeInit(SearchTreeNode** root)
{
    if(root == NULL)
    {
        return;//非法输入
    }
    *root = NULL;
}

二叉树的查找

将要查找的元素的值和根节点的值进行比较, 如果相等直接返回, 如果不相等, 就将要查找的元素的值和根节点的值比较, 如果根节点小于要查找的值, 就在左子树中去查找, 如果大于根节点的值, 就在右子树上查找

SearchTreeNode* SearchTreeFind(SearchTreeNode* root, SearchTreeType to_find)
{
    if(root == NULL)
    {
        return NULL;
    }
    if(root -> key == to_find)
    {
        return root;
    }
    else if(root -> key < to_find)
    {
        return SearchTreeFind(root -> rchild, to_find);
    }
    return SearchTreeFind(root -> lchild, to_find);
}

二叉树的插入

插入分为两种情况, 当数为空的时候就直接创建一个结点然后将其直接插入. 当二叉树不为空的时候, 此时就定义一个 parent 指针指向根节点, 然后判断 parent 指针指向的结点的值和要插入值的值 key 比较. 如果 parent 指针指向的结点的值小于 key, 就递归地在左子树中插入, 如果大于就递归在右子树上插入.

void SearchTreeInsert(SearchTreeNode** root, SearchTreeType key)
{
    if(root == NULL)
    {
        return;
    }
    SearchTreeNode* new_node = Creat(key);
    if(*root == NULL)
    {
        *root = new_node;
        return;
    }
    SearchTreeNode* parent = *root;
    if(parent -> key < key)
    {
        SearchTreeInsert(&parent -> rchild, key);
    }
    else
    {
        SearchTreeInsert(&parent -> lchild, key);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41027326/article/details/80312058