题解 |迭代
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
class Solution {
public:
TreeNode* head=nullptr;
TreeNode* tail=nullptr;
TreeNode* Convert(TreeNode* pRootOfTree) {
TreeNode* root=pRootOfTree;
if(root==nullptr)
return nullptr;
stack<TreeNode*> st;
//前序遍历。
while(root || !st.empty())
{
while(root)
{
st.push(root);
root=root->left;
}
//
TreeNode* node=st.top();
st.pop();
if(head==nullptr)//这里也可以用一个标记来说明是第一次,大差不差的。
{
head=tail=node;
}else
{
tail->right=node;
node->left=tail;
tail=node;
}
//
root=node->right;
}
return head;
}
};
public:
TreeNode* head=nullptr;
TreeNode* tail=nullptr;
TreeNode* Convert(TreeNode* pRootOfTree) {
TreeNode* root=pRootOfTree;
if(root==nullptr)
return nullptr;
stack<TreeNode*> st;
//前序遍历。
while(root || !st.empty())
{
while(root)
{
st.push(root);
root=root->left;
}
//
TreeNode* node=st.top();
st.pop();
if(head==nullptr)//这里也可以用一个标记来说明是第一次,大差不差的。
{
head=tail=node;
}else
{
tail->right=node;
node->left=tail;
tail=node;
}
//
root=node->right;
}
return head;
}
};