zoukankan      html  css  js  c++  java
  • LeetCode-剑指 Offer 二叉搜索树与双向链表

    题目链接

    题意

    将一棵二叉搜索树的结点按照从小到大的顺序构建成一个双向链表,要求不能创建新的节点。

    思路

    1. 首先很容易想到对二叉树的中序遍历可以得到升序的结点序列。
    2. 其次,维护一个头结点head,和一个始终指向当前最后一个结点的prev。
      因此每在第一步得到一个节点,就把它插入到prev的后面,并更新prev。
      注意,树中最左下的结点是第一个遍历到的结点,此时应令其为头结点,即head = cur。
    3. 遍历完成后,将头尾结点串起来。

    代码

    /*
    // Definition for a Node.
    class Node {
    public:
        int val;
        Node* left;
        Node* right;
    
        Node() {}
    
        Node(int _val) {
            val = _val;
            left = NULL;
            right = NULL;
        }
    
        Node(int _val, Node* _left, Node* _right) {
            val = _val;
            left = _left;
            right = _right;
        }
    };
    */
    
    Node* head, prev;
    void solve(Node* root) {
    
        if(!root)
            return ;
    
        solve(root->left);
    
        if(prev == NULL)   // 此时node是最左下的结点
            head = root;
        else
            prev->right = root;
    
        root->left = prev;
        prev = root;    // 令prev指向最后的结点
    
        solve(root->right);
    
    }
    
    Node* treeToDoublyList(Node* root) {
        if(root == NULL)
            return NULL;    //链表题目一定要考虑空的情况
      
        solve(root, ans);  // 中序遍历 + 构建双链表
        head->left = prev;  // 头结点的前驱指向尾结点
        prev->right = head; // 尾结点的后继指向头结点
        return head;
    }
    
    
  • 相关阅读:
    js == 和 === 判断原理
    react 渲染原理
    常见的HTTP状态码
    类数组和数组的区别是什么?
    如何判断一个变量是不是数组?
    typeof 是否正确判断类型? instanceof呢? instanceof 的实现原理是什么?
    前端 js data数组转tree数据结构
    Echarts 基础学习
    Vue CLI 4.0 项目搭建
    Echarts Demo
  • 原文地址:https://www.cnblogs.com/daybreaking/p/14353315.html
Copyright © 2011-2022 走看看