C语言手撕实战代码_二叉排序树(二叉搜索树)_构建_删除_插入操作详解

二叉排序树习题
1.设计算法构建一棵二叉排序树(又称二叉搜索树BST)
2.查找二叉排序树中结点为x的结点所在的层数
3.删除二叉排序树T中值为x的结点
4.查找二叉排序树中所有小于key的关键字
5.编写算法,将一棵二叉树t分解成两棵二叉排序树t1和t2,使得t1中的所有结点关键字的值都小于x,t2中所有结点关键字的值都大于x
6.已知二叉排序树中每一个结点值为整型,采用二叉链表存储,编写算法删除二叉排序树中所有关键字小于x的结点
二叉平衡树习题
7.设计一个算法,计算二叉树中每个结点的平衡因子,同时返回二叉树中不平衡的结点个数

文章目录

  • 1.设计算法构建一棵二叉排序树(又称二叉搜索树BST)
  • 2.查找二叉排序树中结点为x的结点所在的层数
  • 3.删除二叉排序树T中值为x的结点
  • 4.查找二叉排序树中所有小于key的关键字
  • 5.编写算法,将一棵二叉树t分解成两棵二叉排序树t1和t2,使得t1中的所有结点关键字的值都小于x,t2中所有结点关键字的值都大于x
  • 6.已知二叉排序树中每一个结点值为整型,采用二叉链表存储,编写算法删除二叉排序树中所有关键字小于x的结点
  • 7.设计一个算法,计算二叉树中每个结点的平衡因子,同时返回二叉树中不平衡的结点个数

1.设计算法构建一棵二叉排序树(又称二叉搜索树BST)

二叉树搜索树的构建就是多个插入操作的重复使用,下面的代码并用二叉树的前序遍历检验插入结果。
二叉排序树,中序序列序列就变成了有序输出

#include 
#include 

typedef int ElemType;
typedef struct BiTNode
{
   
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;


//二叉排序树的插入操作
void insertKey(BiTree &T,ElemType key)
{
   
    //if是根(子树根)节点的操作,else if是左右子树操作 根节点+左右子树的操作=问题的解
    if(T==NULL)
    {
   
        BiTNode * p=(BiTNode *)malloc(sizeof(BiTNode));
        p->lchild=NULL;
        p->rchild=NULL;
        p->data=key;
        T=p;
    }else if(key<T->data)//如果key<当前结点
    {
   
        insertKey(T->lchild, key);
    }else if(key >T->data)
    {
   
        insertKey(T->rchild, key);
    }
}

BiTNode * creatBSTree()
{
   
    BiTNode *T=NULL;
    ElemType keyList[]={
   40,10,45,15};
    int keyListLength=4;
    for(int i=0;i<keyListLength;i++)
    {
   
        insertKey(T, keyList[i]);
    }
    return T;
}

void preOreder

你可能感兴趣的:(数据结构代码实战(C语言),c语言,开发语言,数据结构)