二元查找树转换成一个排序的双向链表代码

二元查找树转换成一个排序的双向链表代码

ID:15421644

大小:277.50 KB

页数:8页

时间:2018-08-03

二元查找树转换成一个排序的双向链表代码_第1页
二元查找树转换成一个排序的双向链表代码_第2页
二元查找树转换成一个排序的双向链表代码_第3页
二元查找树转换成一个排序的双向链表代码_第4页
二元查找树转换成一个排序的双向链表代码_第5页
资源描述:

《二元查找树转换成一个排序的双向链表代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、二元查找树转换成一个排序的双向链表代码题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。  比如将二元查找树                                            10                                          /                                            6       14                       

2、               /       /                                      4     8  12 16转换成双向链表4=6=8=10=12=14=16。/*1.二叉树中序遍历的结果与链表的顺序一致,所以可以采用中序遍历的方法来修改二叉树的指针2.该题的关键是,如何将左子树的最大值与右子树的最小值通过根root连接起来,比如题目的8和12,这也是细节部分3.写递归程序最重要的是弄明白递归进入的条件、递归返回的状态,如果递归进入时改变了环境,返回时

3、应当恢复环境,就像栈的操作一样4.使用指针变量时,要记得初始化5.该算法没有返回链表头,而是返回了root。*/以下图片为测试结果:[cpp] viewplaincopy1./*节点定义*/  2.  3.typedef struct node  4.  5.{  -8-1.  2.        char value;  3.  4.        struct node *left;  5.  6.        struct node *right;  7.  8.}BSTree;  9. 

4、 10.   11.  12./*查找以tr为根最左边的节点,即以tr为根的二叉排序树的最小值*/  13.  14.BSTree *findLeft(BSTree *tr)  15.  16.{  17.  18.        BSTree*p = NULL;  19.  20.        while(tr->left)  21.  22.        {  23.                p= tr->left;  24.                tr= p;  25.  

5、      }        26.        return tr;  27.}  28.  29.   30.  31./*查找以tr为根最右边的节点,即以tr为根的二叉排序树的最大值*/  32.  33.BSTree *findRight(BSTree *tr)  34.{  35.        BSTree*p = NULL;  36.  37.        while(tr->right)  38.        {  39.                p= tr->righ

6、t;  40.                tr= p;  41.        }  42.        return tr;  43.}  44.  45.   46.  47./*实现将二叉排序树数转变为双链表*/  48.  -8-1.BSTree *ConvertBSTreeToList(BSTree **root)  2.{  3.  4.        if(!*root)  5.                return (BSTree *)NULL;  6.  7.    

7、    BSTree*lt=NULL,*rt=NULL;  8.  9.        if((*root)->right)/*先处理右子树,其实先处理左子树也行*/  10.        {  11.                rt= ConvertBSTreeToList(&(*root)->right);/*递归进入*/  12.  13.                if((*root)->right)/*递归返回处理,如果该根节点的右子树有最小值,则将该最小值的节点与root连起

8、来,否则直接处理*/  14.  15.                        lt= findLeft((*root)->right);  16.  17.                if(lt)rt = lt;  18.  19.                if(rt)  20.                {  21.                        rt->left= *root;  22.                        (*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。