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

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

题目描述

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

分析

先按中序遍历一次,然后根据中序遍历的顺序来组织双向链表

代码

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    
    vector<TreeNode*> v;
    
    void construct_list(void)
    {
        int size = v.size();
        if(size == 1){
            v[0]->left = NULL;
            v[0]->right = NULL;
            return;
        }

        v[0]->left = NULL;
        
        for(int i=1;i<size;i++)
        {
            v[i-1]->right = v[i];
            v[i]->left = v[i-1];
        }
        v[size-1]->right = NULL;
        
    }
    
    //中序遍历
    void recur(TreeNode* node)
    {
        if(node == NULL)return;
        recur(node->left);
        v.push_back(node);
        recur(node->right);
    }
    
    
    TreeNode* Convert(TreeNode* root)
    {
        if(root == NULL)return NULL;
        recur(root);
        
        construct_list();
        
        return v[0];
    }
};
posted @ 2020-02-06 18:20  virgil_devil  阅读(109)  评论(0编辑  收藏  举报