二叉搜索树汇总

二叉搜索树的建立

struct node *insert(int k, struct node *T)
{
    if (!T)
    {
        T = new node;
        T->data = k;
        T->l = T->r = NULL;
    }
    else
    {
        if (k > T->data)
            T->r = creat(k, T->r);
        else
            T->l = creat(k, T->l);
    }
    return T;
}

判断是否为同一棵二叉搜索树

如何判断是否为同一棵二叉树?怎么才叫做是同一棵二叉树呢?
对于二叉搜索树的查找,思路方法是:
1、从根结点开始查找,如果树为空,就返回NULL。
2、如果树不空,就让数据X和根结点的数据Data作比较。
3、如果X的值大于根结点的Data,就往右子树中进行搜索;如果X的值小于根结点的Data,就往左子树中进行搜索。
4、如果X的值等于Data,就表示查找完成,返回该结点。

第一种方法,两棵树直接递归比较:
核心代码:
void judge(struct node *T, struct node *t)
{
    if (T&&t)
    {
        if (T->data != t->data)
        {
            flag = 1;
            return ;
        }
        judge(T->l, t->l);
        judge(T->r, t->r);
    }
}
第二种方法,循环查找(效率高):
核心代码:
node* judge(int x, node* T)
{
    while(T)
    {
        if(x > T->data)
            T=T->r;
        else if(x < T->data)
            T=T->l;
        else
            return T;
    }
    return NULL;
}

二叉搜索树(镜像)的判断

给出一串数,判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出其后序遍历结果

解题思路:
1.首先是判断是否是二叉搜索树,给出先序遍历,因而先序的第一个数字是根结点,找到第一个大于等于根节点的数字,从这个数字开始为右子树,若右子树中有小于根结点的数那么它不是二叉搜索树; 镜像结点判断条件相反即可
2、倘若是二叉搜索树则一边递归一边生成二叉树,最后返回根节点
3、对二叉搜索树进行后序遍历

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值