題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
分析
從根節點開始調整,把最左最右節點的值返回,使用引用作爲傳遞
代碼實現
TreeNode* Convert(TreeNode* root)
{
if(root==NULL)return NULL;
TreeNode* start;
TreeNode* end;
Convert( root, start, end);
return start;
}
void Convert(TreeNode* root, TreeNode* & start, TreeNode* & end)
{
if (root->left == NULL && root->right == NULL ) {
start=root;
end=root;
return;
}
TreeNode* start_left=NULL;
TreeNode* end_left=NULL;
if (root->left) {
Convert(root->left, start_left, end_left);
end_left->right = root;
root->left = end_left;
}
TreeNode* start_right=NULL;
TreeNode* end_right=NULL;
if (root->right) {
Convert(root->right, start_right, end_right);
start_right->left = root;
root->right = start_right;
}
if(start_left)
start = start_left;
else
start = root;
if(end_right)
end = end_right;
else
end = root;
}