题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree) {
TreeNode* cur=pRootOfTree;
if(cur==nullptr)
return nullptr;
stack<TreeNode*> st;
vector<TreeNode*> num;
TreeNode* pre=nullptr;
TreeNode* head;
while(!st.empty() || cur)
{
while(cur)
{
st.push(cur);
cur=cur->left;
}
//左树访问完了.
auto node=st.top();
if(pre==nullptr)
{
head=node;
pre=node;
}else
{
pre->right=node;
node->left=pre;
pre=node;
}
st.pop();
//num.push_back(node);
cur=node->right;
}
return head;
//保存顺序在链接。也可以直接使用一个pre和head来搞.
// int n=num.size();
// for(int i=0;i<n-1;i++)
// {
// num[i]->right=num[i+1];
// num[i+1]->left=num[i];
// }
//return num[0];
}
};
