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

    输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 如下图。

          10

              /

           6    14

          /     /

         4 8 12 16

    转换成双向链表
    4=6=8=10=12=14=16。 

    这是一种二叉树的中序遍历。

    typedef struct BSTreeNode {

        int data;

        struct BSTreeNode *m_pLeft;

        struct BSTreeNode *m_pRight;

    }BSTreeNode,*pBSTreeNode;

     

    pBSTreeNode linkList = NULL;//全局变量,当前链表的指针

    pBSTreeNode  pFormer = NULL;//以前的

    void BinTreeToLinkList(pBSTreeNode BT){

        if(BT!=NULL){

            BinTreeToLinkList(BT->m_pLeft);

            if(linkList==NULL){

                linkList=BT;

                pFormer=BT;

            }else{

                pFormer->m_pRight=BT;

                BT->m_pLeft=pFormer;

                pFormer=BT;

            }

            BinTreeToLinkList(BT->m_pRight);

        }

    }

    如何进行验证呢,首先创建一个二叉树。

    void  addBSTreeNode(pBSTreeNode *pNode,int  data){

            if (*pNode == NULL) {

            *pNode =  (pBSTreeNode)malloc(sizeof(BSTreeNode));

            (*pNode)->data = data;

            (*pNode)->m_pLeft = NULL;

            (*pNode)->m_pRight = NULL;

        }

        else if((*pNode)->data<data){

            addBSTreeNode(&(*pNode)->m_pRight,  data);

        }

        else if((*pNode)->data>data){

            addBSTreeNode(&(*pNode)->m_pLeft,  data);

        }

    }

    //创建

    void  createTree(){

        BSTreeNode *pRoot = NULL;

         addBSTreeNode(&pRoot,10);

        addBSTreeNode(&pRoot,6);

        addBSTreeNode(&pRoot,14);

        addBSTreeNode(&pRoot,4);

        addBSTreeNode(&pRoot,8);

        addBSTreeNode(&pRoot,12);

        addBSTreeNode(&pRoot,16);

         BinTreeToLinkList(pRoot);

      }

  • 相关阅读:
    多态_python的小窝_百度空间
    可直接下载空间客户端
    简明 Python 教程 / 面向对象的编程 / 类与对象的方法
    C++ 基础 woaidongmao C++博客 good 量产
    set has enumerate
    python invoke super parent method
    分享:常用汉字的unicode 编码
    数据库调整也可以遵循“开闭原则”
    Ninject超轻量级的依赖注入工具
    点某个链接进网站,会发这个链接的会员加积分,实现方法(有时间限制)
  • 原文地址:https://www.cnblogs.com/menchao/p/5373376.html
Copyright © 2011-2022 走看看