二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void ConvertNode(TreeNode* pRoot, TreeNode** pListLast)
{
if (pRoot == NULL)
return;
TreeNode* ptmp = pRoot;
if (pRoot->left)
ConvertNode(pRoot->left, pListLast);
ptmp->left = *pListLast;
if (*pListLast)
(*pListLast)->right = ptmp;
*pListLast = ptmp;
if (pRoot->right)
ConvertNode(pRoot->right, pListLast);
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
//链表的尾结点
TreeNode* pListLast = NULL;
ConvertNode(pRootOfTree, &pListLast);
// 找到链表的头结点
TreeNode* pListHead = pListLast;
while (pListHead && pListHead->left)
pListHead = pListHead->left;
return pListHead;
}
};