zoukankan      html  css  js  c++  java
  • 二叉搜索树转换为双向链表

    要求空间复杂度为O(1),两种方法:

    1、不严格的O(1),用了递归

    2、严格的递归,用了Morris中序遍历(中序遍历在tempNode->right == root时,不需要清零,因为此时prevNode正好等于tempNode)

    struct TreeNode
    {
        int val;
        TreeNode *left, *right;
        TreeNode(int _val) : val(_val), left(nullptr), right(nullptr)
        {
    
        }
    };
    
    void doubleLinkList(TreeNode *root, TreeNode *&prevNode)
    {
        if (root == nullptr)
            return;
    
        doubleLinkList(root->left, prevNode);
    
        prevNode->right = root;
        root->left = prevNode;
        prevNode = root;
    
        doubleLinkList(root->right, prevNode);
    }
    
    void doubleLinkList2(TreeNode *root, TreeNode *prevNode)
    {
        while (root)
        {
            if (root->left == nullptr)
            {
                prevNode->right = root;
                root->left = prevNode;
                prevNode = root;
                root = root->right;
            }
            else
            {
                TreeNode *tempNode = root->left;
                while (tempNode->right != nullptr && tempNode->right != root)
                    tempNode = tempNode->right;
    
                if (tempNode->right == nullptr)
                {
                    tempNode->right = root;
                    root = root->left;
                }
                else
                {
                    root->left = prevNode;
                    prevNode = root;
                    root = root->right;
                }
            }
        }
    }
    
    
    int main()
    {
        TreeNode *root = new TreeNode(5);
        root->left = new TreeNode(3);
        root->left->left = new TreeNode(1);
        root->right = new TreeNode(6);
    
        TreeNode dummy(0);
        TreeNode *prevNode = &dummy;
        //doubleLinkList(root, prevNode);
        doubleLinkList2(root, prevNode);
        
        if (dummy.right != nullptr)
            dummy.right->left = nullptr;
    
        return 0;
    }
  • 相关阅读:
    错误记录(一):VSCode
    【洛谷P4770】你的名字
    【洛谷P3177】树上染色
    【洛谷P3704】数字表格
    【CF762F】Tree nesting
    【洛谷P5064】等这场战争结束之后
    【洛谷P3346】诸神眷顾的幻想乡
    【BZOJ#2119】股市的预测
    UiPath数据抓取Data Scraping的介绍和使用
    UiPath录制器的介绍和使用
  • 原文地址:https://www.cnblogs.com/summerwinter/p/4905904.html
Copyright © 2011-2022 走看看