二叉搜索树转化双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表


要求排序可以想到中序遍历,把根节点的左右子树都转换成排序好的双向链表,再将根节点左子树的最大值,右子树的最小值与根节点相连。

class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        TreeNode *lastnode=NULL;
        convertnode(pRootOfTree,lastnode);
        TreeNode *headnode=lastnode;
        while(headnode!=NULL&&headnode->left!=NULL)
            headnode=headnode->left;
        return headnode;
    }
    void convertnode(TreeNode* pnode,TreeNode* &plastnode){
        if(pnode==NULL)
        return ;
        TreeNode *pcurrent=pnode;
        if(pcurrent->left!=NULL)
            convertnode(pcurrent->left,plastnode);
        pcurrent->left=plastnode;
        if(plastnode!=NULL)
            (plastnode)->right=pcurrent;
        plastnode=pcurrent;
        if(pcurrent->right!=NULL)
            convertnode(pcurrent->right,plastnode);
    }
};


原文地址:https://www.cnblogs.com/nickqiao/p/7583344.html