zoukankan      html  css  js  c++  java
  • 把二元查找树转变成排序的双向链表

    把二元查找树转变成排序的双向链表

    用的比较笨的办法,思路是按中序递归得到顺序然后依次修改其指针域。希望得到更好的算法,望知道的赐教

    代码
    //二叉排序树变为双向链表
    #include<iostream>
    #include
    <stack>
    using namespace std;
    struct treenode{ //树节点定义
    int data;
    treenode
    *l;
    treenode
    *r;
    };
    void create(treenode *&t){ //建树
    t->data=10;
    t
    ->l=new treenode();
    t
    ->l->data=6;
    t
    ->l->l=new treenode();
    t
    ->l->l->data=4;
    t
    ->l->l->l=NULL;
    t
    ->l->l->r=NULL;
    t
    ->l->r=new treenode();
    t
    ->l->r->data=8;
    t
    ->l->r->l=NULL;
    t
    ->l->r->r=NULL;

    t
    ->r=new treenode();
    t
    ->r->data=14;
    t
    ->r->l=new treenode();
    t
    ->r->l->data=12;
    t
    ->r->l->l=NULL;
    t
    ->r->l->r=NULL;
    t
    ->r->r=new treenode();
    t
    ->r->r->data=16;
    t
    ->r->r->l=NULL;
    t
    ->r->r->r=NULL;

    }
    void printtree(treenode *t){ //测试
    if(t){
    printtree(t
    ->l);
    cout
    <<t->data<<" ";
    printtree(t
    ->r);
    }
    }
    void convert(treenode *&t){ //转换,主要思路为利用堆栈存储节点顺序然后逆序输出
    stack<treenode *> s,save;
    treenode
    *p=t;
    while(p||!s.empty()){
    if(p){s.push(p);p=p->l;}
    else{
    p
    =s.top();
    s.pop();
    save.push(p);
    p
    =p->r;
    }
    }
    treenode
    *pre,*next;
    next
    =save.top();
    save.pop();
    next
    ->r=NULL;
    while(!save.empty()){
    pre
    =save.top();
    save.pop();
    pre
    ->r=next;
    next
    ->l=pre;
    next
    =pre;
    }
    next
    ->l=NULL;
    t
    =next;

    }
    int main(void){
    treenode
    *t=new treenode();
    treenode
    *pre=NULL;
    create(t);
    printtree(t);
    cout
    <<endl;
    convert(t);
    cout
    <<endl;
    while(t){
    cout
    <<t->data<<" ";
    t
    =t->r;
    }
    system(
    "pause");
    return 0;
    }
  • 相关阅读:
    阅读13-17章
    阅读<构建之法>10、11、12章
    作业5.2
    作业5.1
    作业四:构建之法的困惑和思考(5-7)
    做汉堡
    作业三:构建之法的困惑和思考(1-5)
    实验二 合作:王宏财 http://www.cnblogs.com/wanghongcai/
    实验一--四则运算
    数独九宫格
  • 原文地址:https://www.cnblogs.com/aLittleBitCool/p/1935957.html
Copyright © 2011-2022 走看看