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、按顺序改变个节点的指向
欢迎交流指正!!!