首页 > 其他 > 详细

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

时间:2020-02-21 21:54:14      阅读:70      评论:0      收藏:0      [点我收藏+]

题目描述

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

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    stack<TreeNode*> s; //可以换成vector
    //翻转的中序遍历
    void LDR(TreeNode* p)
    {
        if(p->right!=NULL){
            LDR(p->right);
        }
        s.push(p);
        if(p->left!=NULL){
            LDR(p->left);
        }
    }
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree==NULL)  return NULL;
        if(pRootOfTree->left==NULL && pRootOfTree->right==NULL)  
            return pRootOfTree;
        LDR(pRootOfTree);
        TreeNode* head = s.top();
        TreeNode* p = head;
        head->left = NULL;
        TreeNode* q;
        s.pop();
        while(!s.empty())
        {
            q = s.top();
            s.pop();
            p->right = q;
            q->left = p;
            p = q;
            p->right = NULL;
        }
        return head;
    }
};

 

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

原文:https://www.cnblogs.com/loyolh/p/12343036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!