关于链表的算法..对于july大神的文章的学习笔记

1)二元查找树转换为双线链表

注意事项与学习内容:

1.建立树前应该构造结点结构。

2.创建树的时候,应用递归,并且参数采用引用类型。

3.原理:二元查找树的中续遍历能够顺序的输出当前树的所有数值,利用前续遍历进行对每个节点的转换。

    • 使当前节点的左指针指向当前的双向链表
    • 使当前节点的左指针的右指针指向当前节点

code:

#include <cstdio> #include <iostream>

using namespace std;

typedef struct BSTreeNode {     int m_nValue; // value of node     BSTreeNode *m_pLeft; // left child of node     BSTreeNode *m_pRight; // right child of node }DoubleList;

DoubleList * pHead; DoubleList * pListIndex; //双向链表最后一个元素

void convertToDoubleList(BSTreeNode * pCurrent); // 创建二元查找树 void addBSTreeNode(BSTreeNode* &pCurrent, int value) {     if (NULL == pCurrent)     {         BSTreeNode * pBSTree = new BSTreeNode();         pBSTree->m_pLeft = NULL;         pBSTree->m_pRight = NULL;         pBSTree->m_nValue = value;         pCurrent = pBSTree;

    }     else     {         if ((pCurrent->m_nValue) > value)         {             addBSTreeNode(pCurrent->m_pLeft, value);         }         else if ((pCurrent->m_nValue) < value)         {             addBSTreeNode(pCurrent->m_pRight, value);         }         else         {             //cout<<"重复加入节点"<<endl;         }     } }

// 遍历二元查找树  中序 void ergodicBSTree(BSTreeNode* pCurrent) {     if (NULL == pCurrent)     {               return;     }     if (NULL != pCurrent->m_pLeft)     {         ergodicBSTree(pCurrent->m_pLeft);       }

    // 节点接到链表尾部     convertToDoubleList(pCurrent);     // 右子树为空     if (NULL != pCurrent->m_pRight)     {         ergodicBSTree(pCurrent->m_pRight);     } }

// 二叉树转换成list // void  convertToDoubleList(BSTreeNode * pCurrent) {

    pCurrent->m_pLeft = pListIndex; // 当前指针的左指针指向当前双向链表的最后一个元素     if (NULL != pListIndex)     {         pListIndex->m_pRight = pCurrent; // 双向链表的最后一个元素指向当前元素     }     else     {         pHead = pCurrent; // 中续遍历第一个节点定义为双线链表的头HEAD     }       pListIndex = pCurrent; // 链表末尾指针移动到新加入的元素     cout<<pCurrent->m_nValue<<endl; }

int main() {     BSTreeNode * pRoot = NULL;     pListIndex = NULL;     pHead = NULL;     addBSTreeNode(pRoot, 10);     addBSTreeNode(pRoot, 4);     addBSTreeNode(pRoot, 6);     addBSTreeNode(pRoot, 8);     addBSTreeNode(pRoot, 12);     addBSTreeNode(pRoot, 14);     addBSTreeNode(pRoot, 15);     addBSTreeNode(pRoot, 16);     ergodicBSTree(pRoot);     return 0; } 

Reference:

1.http://blog.csdn.net/v_july_v/article/details/6870251

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值