// 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
/*
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* pLastNodeInList = NULL ;
DoIt(pRootOfTree, &pLastNodeInList) ;
while(pLastNodeInList->left)// at least pLastNodeInList is not null
pLastNodeInList = pLastNodeInList->left ;
return pLastNodeInList ;
}
void DoIt(TreeNode* pRootOfTree, TreeNode** ppLastNodeInList) {
if(pRootOfTree == NULL) return ;
if(pRootOfTree->left)
DoIt(pRootOfTree->left, ppLastNodeInList) ;
pRootOfTree->left = *ppLastNodeInList ;
if(*ppLastNodeInList)
(*ppLastNodeInList)->right = pRootOfTree ;
*ppLastNodeInList = pRootOfTree ;
if(pRootOfTree->right)
DoIt(pRootOfTree->right, ppLastNodeInList) ;// pRootOfTree->right
}
};
二叉搜索树与双向链表
最新推荐文章于 2024-02-18 12:27:54 发布