- 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能建立任何新的結點,只能調整樹中結點指針的指向。
/*
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)
{
if(!pRootOfTree)
return NULL;
return ConvertTree(pRootOfTree, true);
}
TreeNode* ConvertTree(TreeNode * root, bool isRight){
if(!root)
return NULL;
TreeNode * left = ConvertTree(root->left, false);
TreeNode * right = ConvertTree(root->right, true);
root->left = left;
if(left)
left->right = root;
root->right = right;
if(right)
right->left = root;
if(isRight){
while(root->left)
root = root->left;
}else{
while(root->right)
root = root->right;
}
return root;
}
};