zoukankan      html  css  js  c++  java
  • 二叉搜索树转化为有序双向链表(C语言)

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 typedef struct BSTreeNode
     5 {
     6     int m_nValue;
     7     BSTreeNode *m_pLeft; 
     8     BSTreeNode *m_pRight; 
     9 }BSTreeNode;
    10  
    11 BSTreeNode *pHead=NULL;
    12 BSTreeNode *pIndex=NULL;
    13 
    14 void addBSTreeNode(BSTreeNode* &pCurrent,int value)
    15 {
    16     if (pCurrent==NULL)
    17     {
    18         BSTreeNode* pBSTree = NULL;
    19         pBSTree    = (BSTreeNode*)malloc(sizeof(BSTreeNode));
    20         pBSTree->m_nValue=value;
    21         pBSTree->m_pLeft=NULL;
    22         pBSTree->m_pRight=NULL;
    23         pCurrent=pBSTree;
    24     }
    25     else if(pCurrent->m_nValue<value)
    26     {
    27         addBSTreeNode(pCurrent->m_pRight,value);
    28     }
    29     else if(pCurrent->m_nValue>value)
    30     {
    31         addBSTreeNode(pCurrent->m_pLeft,value);
    32     }
    34 }
    35 
    36 void convertToDoubleList(BSTreeNode* pCurrent)
    37 {
    38     pCurrent->m_pLeft=pIndex;//使当前结点的左指针指向双向链表中最后一个结点
    39     if (NULL==pIndex)//若最后一个元素不存在,此时双向链表尚未建立,因此将当前结点设为双向链表头结点
    40     {
    41         pHead=pCurrent;
    42     }
    43     else//使双向链表中最后一个结点的右指针指向当前结点
    44     {
    45         pIndex->m_pRight=pCurrent;
    46     }
    48     pIndex=pCurrent;//将当前结点设为双向链表中最后一个结点
    50     printf("%d ",pCurrent->m_nValue);
    52 }
    53 
    54 void inOrderBSTree(BSTreeNode* pBSTree)
    55 {
    57     if (NULL==pBSTree)
    58     {
    59         return;
    60     }
    61     if (NULL!=pBSTree->m_pLeft)
    62     {
    63         inOrderBSTree(pBSTree->m_pLeft);
    64     }
    65  
    66     convertToDoubleList(pBSTree);
    67  
    68     if (NULL!=pBSTree->m_pRight)
    69     {
    70         inOrderBSTree(pBSTree->m_pRight);
    71     }
    73 }
    74 
    76 int main()
    77 {
    79     BSTreeNode *pRoot=NULL;
    80     addBSTreeNode(pRoot,10);
    81     addBSTreeNode(pRoot,6);
    82     addBSTreeNode(pRoot,14);
    83     addBSTreeNode(pRoot,4);
    84     addBSTreeNode(pRoot,8);
    85     addBSTreeNode(pRoot,12);
    86     addBSTreeNode(pRoot,16);
    87     inOrderBSTree(pRoot);
    88     return 0;
    89 }
  • 相关阅读:
    Numpy用于数组的文件输入输出
    numpy利用数组进行数据处理
    numpy的通用函数:快速的元素级数组函数
    NumPy基础知识:数组和矢量计算
    数据处理任务介绍
    Django的ModelForm
    Http1.0和Http1.1的主要区别
    静态库中如何包含资源文件
    zt 正则
    oc调用swift的打包.a / framework 不成功?!
  • 原文地址:https://www.cnblogs.com/walker-lee/p/5813145.html
Copyright © 2011-2022 走看看