-
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
-
思想:
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode* pre;
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(!pRootOfTree)
return NULL;
pre=NULL; //初始化第一個節點的左指針
TreeNode* root = inOrder(pRootOfTree);
while(root->left)
root=root->left; //調整到頭結點
return root;
}
TreeNode* inOrder(TreeNode* node)
{
if(!node)
return NULL;
else
{
inOrder(node->left); //中序遍歷
node->left=pre;
if(pre!=NULL)
pre->right=node;
pre=node;
inOrder(node->right);
}
return node;
}
};