题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路:
中序遍历即可。
由于树为二叉搜索树,所以左节点小于根节点,小于右节点,所以转换过来的双向链表的左节点连接根节点,根节点连接右节点。
/*
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)
{
if(pRootOfTree==NULL)
return NULL;
TreeNode *pointer=NULL;
convertlist(pRootOfTree,pointer);
while(pointer->left!=NULL)
pointer=pointer->left;
return pointer;
}
void convertlist(TreeNode *pRoot,TreeNode *&pointer)
{
if(pRoot==NULL)
return;
if(pRoot->left!=NULL)
convertlist(pRoot->left,pointer);
pRoot->left=pointer;
if(pointer!=NULL)
pointer->right=pRoot;
pointer=pRoot;
if(pRoot->right!=NULL)
convertlist(pRoot->right,pointer);
}
};