首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  其它技术  |  算法与数据结构  


二叉查找树(BST)---拷贝/相等判断/查找节点/统计节点/统计层数/判断BST


原作者:fertiland    源出处:CSDN   发布者:施昌权    发布类型:转载    发布日期:2008-12-01

                                       
//拷贝树
void   copy_tree(TreeNode  *&dst,TreeNode *src)  
...{        
    if( NULL==src)      
        dst= NULL ;       
    else        
    ...{              
        dst=(TreeNode *) malloc(sizeof(TreeNode));
        dst->left = dst->right = NULL;
        dst->value = src->value;            
        copy_tree(dst->left,src->left);  
        copy_tree(dst->right,src->right);     
    }
  
}

//判断两棵二叉树是否相等
bool equal_tree(TreeNode *a, TreeNode *b)
...{
    if (a == NULL && b == NULL) ...{
        return true;
    }

    
    if (a != NULL && b != NULL &&(a->value == b->value)&&
        equal_tree(a->left, b->left) && equal_tree(a->right, b->right)) ...{
        return true;
    }

    else...{
        return false;
    }

}

//查找节点
bool find_node(TreeNode *t, int value)
...{
    if( t == NULL )
        return false;
    if( t->value == value )
    ...{
        return true;
    }

    if( t->value < value )
        return find_node(t->left, value);
    if(t->value > value)
        return find_node(t->right, value);
}

//查找父节点
TreeNode* parent_node(int value, TreeNode *t)
...{

    if (t == NULL) ...{
        return NULL;
    }


    if (t->value == value)    //根节点
        return t;

    if (t->left->value == value || 
        t->right->value == value) ...{ //非根节点
        return t;
    }

    else if (value < t->value) ...{
        return parent_node(value, t->left);
    }

    else if (value > t->value) ...{
        return parent_node(value, t->right);
    }

    
    return NULL;
}

//统计节点个数
int count_node(TreeNode *t)
...{
    if (t == NULL) ...{
        return 0;
    }

    else...{
        return 1+count_node(t->left)+count_node(t->right);
    }

}

//统计层数
int level(TreeNode *t)
...{
    int l=0, r=0;
    if (t == NULL) ...{
        return 0;
    }

    else...{
        if (t->left != NULL) ...{
            l=1+level(t->left);
        }

        if (t->right != NULL) ...{
            r=1+level(t->right);
        }
    
        return l>r?l:r;
    }

}

//判断是否为二叉排序树
bool isbst(TreeNode *t)
...{
    if ( t == NULL ) ...{
        return true;
    }


    if (isbst(t->left) && isbst(t->right) ) ...{
        if ((t->left != NULL && t->right == NULL && t->value > t->left->value) ||
           (t->right != NULL && t->left == NULL && t->value <= t->right->value) ||
           (t->left != NULL && t->right != NULL && t->value > t->left->value && t->value <= t->right->value) ||
           (t->left == NULL && t->right == NULL))...{
                             return true;            
        }

        else...{
            return false;
        }

    }

    else...{
        return false;
    }

}


关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号