/*
[二叉搜索树与双向链表]
[题目]
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
[解析]
采用中序遍历二叉搜索树,可以得到排序的结果。
注意边界条件。
*/
#include <iostream>
#include <algorithm>
using namespace std;
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x): val(x), left(NULL), right(NULL) {}
};
class Solution{
public:
TreeNode* Convert(TreeNode* pRootOfTree){
if(pRootOfTree == NULL)
return NULL;
TreeNode* prev = NULL;
ConvertRecursive(pRootOfTree, prev);
// find head;
TreeNode* pHead = pRootOfTree;
while(pHead->left)
pHead = pHead->left;
return pHead;
}
void ConvertRecursive(TreeNode* pRootOfTree, TreeNode* &prev){
if(pRootOfTree == NULL)
return;
// left
ConvertRecursive(pRootOfTree->left, prev);
// root
if(prev != NULL)
prev->right = pRootOfTree;
pRootOfTree->left = prev;
prev = pRootOfTree;
// right
ConvertRecursive(pRootOfTree->right, prev);
}
};
int main()
{
return 0;
}
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15308.html