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

     

    题目描述

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

    解题思路

    问题是将二叉搜索树转换成一个排序的双向链表,考虑到二叉搜索树的中序遍历序列为排序序列,所以可用中序遍历的递归做法来调整指针。在遍历过程中,调整指针pLast使其指向当前已转换好双向链表的末尾也就是最大数字,这样每当遍历到一个节点,只需要调整两次指针:

    1. 调整当前结点的left指针指向pLast
    2. 调整pLast指向结点的right指针指向当前结点

    这样递归调整完成后,pLast指向的就是双向链表的最后一个节点,要返回的是头结点,所以依次向前调整pLast直至其左指针为空即指向头结点。

    代码

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };*/
    10 class Solution {
    11 public:
    12     TreeNode* pLast=NULL;
    13     TreeNode* Convert(TreeNode* pRoot)
    14     {
    15         if(!pRoot)
    16             return NULL;
    17         ToList(pRoot);
    18         while(pLast->left)
    19             pLast=pLast->left;
    20         return pLast;
    21     }
    22     void ToList(TreeNode* pRoot){
    23         if(pRoot){
    24             if(pRoot->left)
    25                 ToList(pRoot->left);
    26             if(pLast){
    27                 pLast->right=pRoot;
    28                 pRoot->left=pLast;
    29             }
    30             pLast=pRoot;
    31             if(pRoot->right)
    32                 ToList(pRoot->right);
    33         }
    34     }
    35 };
  • 相关阅读:
    HDFS工作流程
    HADOOP 安全模式
    Hadoop环境的搭建
    面向对象-绑定与非绑定方法
    面向对象-封装
    面向对象-继承与派生
    面向对象-多态与多态性
    面向对象-绑定方法
    LOL游戏基本代码
    1 面向对象的程序设计
  • 原文地址:https://www.cnblogs.com/wmx24/p/8830758.html
Copyright © 2011-2022 走看看