美文网首页数据结构&算法&人工智能
剑指offer编程题—二叉搜索树与双向链表

剑指offer编程题—二叉搜索树与双向链表

作者: 零岁的我 | 来源:发表于2020-03-29 16:40 被阅读0次

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

    解题思路
    二叉搜索树的中序遍历序列就是一个排好序的递增序列,核心思想就是在中序遍历的过程中修改当前访问节点的left指针,使其指向上一次遍历访问的节点,即curNode->left=pre;,并修改上一次遍历访问节点的right指针,使其指向当前访问节点,即pre->right=curNode;

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    private:
        stack<TreeNode*> s;
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            if(!pRootOfTree) return nullptr;
            TreeNode* head;
            TreeNode* pre=nullptr; //pre初始化为空
            TreeNode* curNode=pRootOfTree;
            while(curNode || !s.empty()){
                if(curNode){
                    s.push(curNode);
                    curNode=curNode->left;
                }
                else{
                    curNode=s.top();
                    s.pop();
                    if(!pre) head=curNode; //保存链表的首元节点
                    else pre->right=curNode; 
                    curNode->left=pre;
                    pre=curNode;
                    curNode=curNode->right;
                }
            }
            return head;
        }
    };
    

    相关文章

      网友评论

        本文标题:剑指offer编程题—二叉搜索树与双向链表

        本文链接:https://www.haomeiwen.com/subject/reruuhtx.html