• 剑指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];
        }
    };
    
  • 相关阅读:
    [SDOI2015]星际战争
    [SDOI2016]生成魔咒
    hdu3311
    [ZJOI2011]最小割
    P3331 [ZJOI2011]礼物(GIFT)
    [ZJOI2010]贪吃的老鼠
    状压dp-----三进制
    noip2016 天天爱跑步
    概率期望dp
    poj2186
  • 原文地址:https://www.cnblogs.com/virgildevil/p/12269707.html
Copyright © 2020-2023  润新知