您的位置:首页 > 职场人生

剑指offer面试题[27]-二叉搜索树与双向链表

2017-07-30 12:01 483 查看


题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode* pLastNodeInList=NULL;
ConvertNode(pRootOfTree,&pLastNodeInList);

TreeNode* pHeadOfList=pLastNodeInList;
while(pHeadOfList!=NULL&&pHeadOfList->left!=NULL)
pHeadOfList=pHeadOfList->left;
return pHeadOfList;
}

void ConvertNode(TreeNode* pRootOfTree,TreeNode* *pLastNodeInList)
{
if(pRootOfTree==NULL)
return;

TreeNode* pCurrent=pRootOfTree;

if(pCurrent->left!=NULL)
ConvertNode(pCurrent->left,pLastNodeInList);

pCurrent->left=*pLastNodeInList;
if(*pLastNodeInList!=NULL)
(*pLastNodeInList)->right=pCurrent;
*pLastNodeInList=pCurrent;

if(pCurrent->right!=NULL)
ConvertNode(pCurrent->right,pLastNodeInList);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息