• 剑指offer36.将BST原地转换为双向循环链表


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

     特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。

    注意点:

    • 中序遍历BST即为排序序列
    • 建立dummy节点,简化代码
    /*
    // 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;
        }
    };
    */
    class Solution {
    public:
        // 自定义成员变量不能在这初始化  Node dummy(0); wrong
        Node dummy;
        Node *pre = &dummy, *head = pre;
        
        void dfs(Node* cur) {
            if (!cur) return;
            //中序遍历
            dfs(cur->left);
            
            // 对当前节点的操作,建立dummy节点处理更方便
            pre->right = cur;
            cur->left = pre;
            pre = cur;
            
            dfs(cur->right);
        }
        
        Node* treeToDoublyList(Node* root) {
            if (!root) return root;
            
            dfs(root);
            // 处理首尾节点,首节点left指向尾节点,尾节点right指向首节点
            head = head->right;
            head->left = pre;
            pre->right = head;
            
            return head;
        }
    };
  • 相关阅读:
    Java 多线程初级汇总
    C# 妈妈再打我一下生成器
    使用CKRule规则引擎处理多变业务
    Ckrule业务规则管理系统简介
    CKRule业务规则管理系统部署说明
    工资系统的公式引擎
    决策树与规则引擎
    使用CKRule实现促销管理系统
    使用CKRule实现PVC配方计算
    浅谈PVC塑料配方计算软件的设计
  • 原文地址:https://www.cnblogs.com/betaa/p/12654086.html
Copyright © 2020-2023  润新知