目录
面试题38:字符串的排列(书上解法暂未调试通过)
例1:找出所有被X包围的区域,并将其中的‘O’全部替换为‘X’.(自己编写的代码暂未调试通过)
1.剑指Offer
面试题36:二叉搜索树与双向链表
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:中序遍历+递归实现
书上解法:
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode* pLastNodeinList=nullptr;
ConvertNode(pRootOfTree,&pLastNodeinList);
TreeNode* pHeadofList=pLastNodeinList;
while(pHeadofList!=nullptr&&pHeadofList->left!=nullptr){
pHeadofList=pHeadofList->left;
}
return pHeadofList;
}
void ConvertNode(TreeNode* pRootOfTree,TreeNode** pLastNodeinList){
if(pRootOfTree==nullptr){
return;
}
TreeNode* pCurrent=pRootOfTree;
if(pCurrent->left){
ConvertNode(pCurrent->left,pLastNodeinList);
}
pCurrent->left=*pLastNodeinList;
if(*pLastNodeinList){
(*pLastNodeinList)->right=pCurrent;
}
pCurrent=*pLastNodeinList;
if(pCurrent->right){
ConvertNode(pCurrent->right,pLastNodeinList);
}
}
};
牛客网调试出现数组和指针越界问题,暂时没有想出解决方案,后面在修改。
正确代码:(已调试通过!)
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree==nullptr) return nullptr;
TreeNode* pre=nullptr;
ConvertNode(pRootOfTree,pre);
TreeNode* pHead=pRootOfTree;
while(pHead->left){
pHead=pHead->left;
}
return pHead;
}
void ConvertNode(TreeNode* cur,TreeNode*& pre){
if(cur==nullptr) return;
ConvertNode(cur->left,pre);
cur->left=pre;
if(pre){
pre->right=cur;
}
pre=cur;
ConvertNode(cur->right,pre);
}
};
面试题38:字符串的排列
题目描述: