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;
        }
    };
  • 相关阅读:
    分布式-通信(NIO&BIO&网络模型&零拷贝)
    cmake构建和链接静态库与动态库
    ldd
    CMAKE_BUILD_TYPE
    C/CXX attribute
    ffmpeg使用说明(2):ffmpeg提取video,audio,yuv/rgb,PCM
    ffmpeg使用说明(1):ffmpeg帮助使用指南
    ffmpeg使用说明(0):ffmpeg/ffplay/ffprobe
    ffplay使用帮助说明
    书写log的艺术
  • 原文地址:https://www.cnblogs.com/logo-88/p/9783466.html
Copyright © 2011-2022 走看看