class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (pRootOfTree == nullptr)
return pRootOfTree;
stack<TreeNode*> ista;
vector<TreeNode*> ivec;
auto pin = pRootOfTree;
while (!(ista.empty() && pin == nullptr)){
while(pin != nullptr){
ista.push(pin);
pin = pin->left;
}
if (!ista.empty()){
pin = ista.top();
ista.pop();
ivec.push_back(pin);
pin = pin->right;
}
}
ivec.front()->left = nullptr;
ivec.back()->right = nullptr;
int length = ivec.size();
for (int i = 0; i != length-1; ++i){
ivec[i]->right = ivec[i+1];
ivec[i+1]->left = ivec[i];
}
return ivec.front();
}
};写完后看了一下,和不少同学的思路相同
1、二叉搜索树的中序遍历是递增数列,先用非递归方式中序遍历搜索树,节点存在vec容器中
2、按顺序改变个节点的指向
欢迎交流指正!!!

京公网安备 11010502036488号