将二叉搜索树转换为一个有序的双向链表
测试用例:
功能测试:完整的二叉搜索树,只有左孩子(右孩子)的二叉搜索树,只有一个节点的树
特殊值测试:空指针
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(!pRootOfTree)return NULL;
TreeNode* pre=NULL;
find(pRootOfTree,pre);
while(pRootOfTree->left)
pRootOfTree=pRootOfTree->left;
return pRootOfTree;
}
void find(TreeNode* root,TreeNode* &pre)
{
if(root==NULL)return;
find(root->left,pre);
root->left=pre;
if(pre)pre->right=root;
pre=root;
find(root->right,pre);
}
这个跟中序遍历差不多,发现中序遍历的序列就是有序的。只用一个pre指针记录前一个节点就行。