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

    题目描述

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
     
     
     
    提交链接:点击
     
     
     
    思路:
          1.将左子树构成双向链表,返回指向链表的头结点leftHead
          2.定位到左子树的最后一个节点
          3.如果左子树不为空,那么将root节点链接在左子树最后一个节点的后面,结果返回leftHead;如果为空,则结果返回root
          4.将右子树构成双向链表,返回指向链表的头结点rightHead
          5.如果右子树链表不为空的话,将rightHead链接在root后面
     
     
    代码:
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            if(!pRootOfTree) return NULL;
            if(!pRootOfTree->left && !pRootOfTree->right) return pRootOfTree;
            //1
            TreeNode *leftHead=Convert(pRootOfTree->left);
            //2
            TreeNode *temp=leftHead;
            while(temp!=NULL && temp->right!=NULL){
                temp=temp->right;
            }
            //3
            if(leftHead){
                temp->right=pRootOfTree;
                pRootOfTree->left=temp;
            }
            //4
            TreeNode *rightHead=Convert(pRootOfTree->right);
            //5
            if(rightHead){
                pRootOfTree->right=rightHead;
                rightHead->left=pRootOfTree;
            }
            if(leftHead)
                return leftHead;
            else
                return pRootOfTree;
        }
    };
  • 相关阅读:
    服务器带宽
    nload 源码安装
    Error: rpmdb open failed
    宽带,带宽,网速
    使用speedtest-cli测量服务器带宽
    ubuntu 安装 iperf
    微信退款机制
    记录程序执行之间,接口调用时间到日志文件或数据库
    机智的查询
    如果一些复杂的数据查询不好用数组,那就用字符串拼接,灵活方便
  • 原文地址:https://www.cnblogs.com/logo-88/p/9783466.html
Copyright © 2011-2022 走看看