题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
tips: 使用递归,使用一个指针的引用,来记录转换为链表后的最后一个元素
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree==NULL) {
return NULL;
}
TreeNode* pLast=NULL;
cursiveConvert(pRootOfTree,pLast);
while(pLast->left) {
pLast=pLast->left;
}
return pLast;
}
void cursiveConvert(TreeNode* pRoot,TreeNode*& pLast) {
if(pRoot==NULL) {
return;
}
cursiveConvert(pRoot->left,pLast);
if(pLast!=NULL) {
pRoot->left=pLast;
pLast->right=pRoot;
}
pLast=pRoot;
cursiveConvert(pRoot->right,pLast);
}
};
本文介绍了一种不创建新节点,仅通过调整二叉搜索树节点指针指向,将其转换为排序双向链表的方法。利用递归,记录转换后链表的最后一个元素,最终返回链表头节点。
1017

被折叠的 条评论
为什么被折叠?



