题目:
输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
解法:
二叉搜索树的中序遍历(左,根,右)形成的就是一个排序的结构。因此整体利用二叉树的中序遍历。在遍历过程中修改left和right指向即可。
代码:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree==NULL)
return NULL;
TreeNode* pre =NULL;
ConvertNode(pRootOfTree,pre);
TreeNode* head =pRootOfTree;
while(head->left!=NULL)
head = head->left;
return head;
}
void ConvertNode(TreeNode* cur, TreeNode* &pre)
{//中序遍历,同时转换left和right指针,pre代表上一个节点,初始化为NULL,因为树的最左边节点是没有pre节点的。
if(cur==NULL)
return;
ConvertNode(cur->left,pre);
cur->left = pre;
if(pre!=NULL)
pre->right = cur;
pre = cur;
ConvertNode(cur->right,pre);
}