题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
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]; } };