二叉搜索树转换双向链表

将二叉搜索树转换为一个有序的双向链表

测试用例:

功能测试:完整的二叉搜索树,只有左孩子(右孩子)的二叉搜索树,只有一个节点的树

特殊值测试:空指针

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指针记录前一个节点就行。

猜你喜欢

转载自blog.csdn.net/qq_36162275/article/details/87916388