剑指offer-26.二叉搜索树与双向链表

来源:互联网 发布:java工作流开发 编辑:程序博客网 时间:2024/06/04 20:00

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。


思路:可以中序遍历,然后push到一个vector里面,然后改变指针指向,最后即可;递归解法不讨论,递归解法难理解


/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    vector<TreeNode* >temp;    //中序遍历值是有序的    void tranverse(TreeNode* pNode)    {        if (pNode == NULL)            return;        tranverse(pNode->left);        temp.push_back(pNode);        tranverse(pNode->right);    }    //再进行改变指针    TreeNode* gaibian()    {        //右指针        for (int i = 0; i < temp.size(); i++)        {            temp[i]->right = temp[i+1];        }        //注意,最后一个节点的右指针附空        temp[temp.size()-1]->right = NULL;        //左指针        for (int i = temp.size()-1; i > 0; i--)        {            temp[i]->left = temp[i-1];        }        //同样,第一个节点的左指针附空        temp[0]->left = NULL;        return temp[0];            }    TreeNode* Convert(TreeNode* pRootOfTree)    {        if (NULL == pRootOfTree)            return NULL;        tranverse(pRootOfTree);        return gaibian();    }};




0 0