二叉树--将二叉搜索树转换成一个排序的双向链表

思路:
二叉搜索树本来就是已经排好序的,左比根小右比根大。
所以我们将左子树的最右的节点与根相连并且将根与右子树中最左边的结点相连接。
之后对子树进行递归操作。
这里写图片描述

void ConvertNode(BinaryTreeNode* pNode,BinaryTreeNode** pLastNodeInList)
{
     if(pNode == NULL)
          return ;

     BinaryTreeNode* pCur = pNode;

     //构建左子树双向链表
     if(pCur -> left != NULL)
          ConvertNode(pCur -> left,pLastNodeInList);

     //根与左右相连接
     pCur -> left = *pLastNodeInList; 
     if(*pLastNodeInList != NULL)
          (*pLastNodeInList) -> right = pCur;

     //构建右子树双向链表
     *pLastNodeInList = pCur;
     if(pCur -> right != NULL)
          ConvertNode(pCur -> right,pLastNodeInList);
}

//pLastNodeInList指向链表的尾,最后将它返回头处。
BinaryTreeNode* Convert(BinaryTreeNode* pRoot)
{
     BinaryTreeNode* pLastNodeInList = NULL;
     ConvertNode(pRoot,&pLastNodeInList);

     BinaryTreeNode* pHeadOfList = pLastNodeInList;
     while(pHeadOfList != NULL && pHeadOfList -> left != NULL)
          pHeadOfList = pHeadOfList -> left;

     return pHeadOfList;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值