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

    整个过程可以看做是三部分的链表化,左子树、根节点和右子树。

    递归地对这三部分进行链表化,在链表化中处理好左子树最右节点与根节点的链接关系、根节点与右子树的关系,那么整个过程就能够完成。

    代码

    TreeNode * convert(TreeNode * root)
    {
        TreeNode *LastNodeInList = NULL;
        convertNode(root,&LastNodeInList);
       
        TreeNode ListHead = LastNodeInlist;
        while(ListHead != NULL && ListHead->left != NULL)

        {

            ListHead = ListHead->left;

         }

         return ListHead;
    }

    void convertNode(TreeNode * node, TreeNode = LastNodeInList)

    {

        if(node == NULL) return ;

        TreeNode * current = node; //记住,此时node 与current相当

        if(current->left != NULL)

            convertNode(current->letf,LastNodeInList); //递归地调用此函数进行链表修改

        current->left = LastNodeInList; //修改指针 current指向前一部分的最右(最大元素)

        if(LastNodeInList !=NULL)LastNodeInList->right = current;//修改指针,前一部分最右元素指向current

        LastNodeInList = current;//左边部分链接完毕,最右元素LastNodeInList为current,

        if(current->right != NULL)

            convertNode(current->right,LastNodeInList);

    }

    总结: 要了解递归,首先得了解递归。

  • 相关阅读:
    阿里云ECS服务器安装docker
    ActiveMq-常见的问题
    ActiveMq-基础知识
    java语言概述
    【日语词汇类编】自然与人:气候与环境
    【日语词汇类编】传媒与娱乐:大众传播媒介
    机器学习数学基础-线性代数
    掌握机器学习数学基础之概率统计
    机器学习理论篇:机器学习的数学基础
    计算机基础知识
  • 原文地址:https://www.cnblogs.com/xiawen/p/3017106.html
Copyright © 2011-2022 走看看