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

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

     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 
    11 /*
    12 //递归版本1
    13     TreeNode* Convert(TreeNode* pRootOfTree)
    14     {
    15         if(!pRootOfTree) return NULL;
    16         if(!pRootOfTree->left&&!pRootOfTree->right) return pRootOfTree;
    17          TreeNode* left;
    18         left=Convert(pRootOfTree->left);
    19         TreeNode* p=left;
    20         //找到左子树转换成双链表之后最后一个元素。
    21         while(p!=NULL&&p->right!=NULL)
    22             p=p->right;
    23         if(left)
    24         {
    25             p->right=pRootOfTree;
    26             pRootOfTree->left=p;
    27         }
    28         //右子树第一个接到root之后。
    29         TreeNode* right;
    30         right=Convert(pRootOfTree->right);
    31         if(right)
    32         {
    33             right->left=pRootOfTree;
    34             pRootOfTree->right=right;
    35         }
    36         return  left!=NULL?left:pRootOfTree;
    37     }
    38 */
    39 class Solution {
    40 public:
    41     //递归版本2
    42     TreeNode* pre;//全局变量,保存当前访问结点的前一个结点
    43     TreeNode* Convert(TreeNode* pRootOfTree)
    44     {
    45         if(pRootOfTree==NULL) return NULL;
    46         if(!pRootOfTree->left&&!pRootOfTree->right)
    47         {
    48             pre=pRootOfTree;
    49             return pRootOfTree;
    50         }
    51         TreeNode* left=Convert(pRootOfTree->left);
    52         //前一个结点的右子树指向当前节点,当前节点的左子树指向前一个节点,即可实现双向链表。
    53         if(left)
    54         {
    55             pre->right=pRootOfTree;
    56             pRootOfTree->left=pre;
    57         }
    58         pre=pRootOfTree;
    59         TreeNode* right=Convert(pRootOfTree->right);
    60         if(right)
    61         {
    62             right->left=pRootOfTree;
    63             pRootOfTree->right=right;
    64         }
    65         return left!=NULL?left:pRootOfTree;
    66      }
    67 };
  • 相关阅读:
    路由器 命令行基础
    docker 学习
    flume 配置
    CentOS 7 安装字体库 & 中文字体
    centos7 web服务器内核优化
    hive 搭建
    varnish4.1 配置文件default.vcl
    varsh4.1 安装清除cache
    jvm 配置
    centos7优化内核参数详解
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/7851756.html
Copyright © 2011-2022 走看看