`

递归-----把二元查找树转变成排序的双向链表

阅读更多
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
  比如将二元查找树
                                             10
                                           /     \
                                         6        14
                                       /   \      /  \
                                    4      8   12     16
转换成双向链表
4=6=8=10=12=14=16。

大思路是:中序遍历。

小思路: 把二叉树的左右孩子看成双链表中的联系两边借点的东东。 最开始双链表是空的。
class Node{
  public int currentVal;
  public Node left;
  public Node right;
}

public Node covertNodeAndGetFirstList(Node currentNode,Node lastListNode){
   if(currentNode==null){
      while(lastListNode.left!=null){
           lastListNode = lastListNode.left;
     }
      return lastListNode;
   }
    if(currentNode.left != null){
          covertNode(currentNode.left , lastListNode);
    }
   
    currentNode.left = lastListNode;
    if(lastListNode !=null)
        lastListNode.rigth = currentNode;
    lastListNode = currrentNode;
   
    if(currentNode.rigth!=null){
        covertNode(currentNode.right,lastListNode);
    }
}






分享到:
评论

相关推荐

    程序员面试题精选100题

    今天,我们将深入分析其中的一道题目,即将二元查找树转换成排序的双向链表。 知识点一:二元查找树(Binary Search Tree) 二元查找树是一种特殊的树状数据结构,它的每个结点都含有一个关键字(Key),左子树中...

    C语言通用范例开发金典.part2.rar

    范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵的建立 136 ∷相关函数:Create函数 1.3.23 稀疏矩阵的删除 138 范例1-54 稀疏矩阵的删除 138 ∷...

    C语言通用范例开发金典.part1.rar

    范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵的建立 136 ∷相关函数:Create函数 1.3.23 稀疏矩阵的删除 138 范例1-54 稀疏矩阵的删除 138 ∷...

    C 开发金典

    范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵的建立 136 ∷相关函数:Create函数 1.3.23 稀疏矩阵的删除 138 范例1-54 稀疏矩阵的删除 138 ∷...

    软件工程之专题九:数据结构知识

    双向链表是另一种形式的链式结构,双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。双向链表克服了单链表的单向性的缺点。 前驱方向 后继方向 双向链表也可以有循环表,链表中存在两个...

    计算机二级公共基础知识

    这样的表称为双向链表。 在线性链表中,各数据元素结点的存储空间可以是不连续的,且各数据元素的存储顺序与逻辑顺序可以不一致。在线性链表中进行插入与删除,不需要移动链表中的元素。 线性单链表中,HEAD称为头...

    《数据结构 1800题》

    双向链表 11.在下面的程序段中,对 x的赋值语句的频度为(C )【北京工商大学 2001 一、10(3分)】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 ...

    C程序范例宝典(基础代码详解)

    实例088 创建双向链表 114 实例089 创建循环链表 117 实例090 双链表逆置 118 实例091 双链表逆序输出 120 实例092 约瑟夫环 122 实例093 创建顺序表并插入元素 123 实例094 向链表中插入结点 125 ...

    世界500强面试题.pdf

    1.2.1. 把二元查找树转变成排序的双向链表.................................................... 8 1.2.2. 下排每个数都是先前上排那十个数在下排出现的次数 ..........................11 1.2.3. 设计包含 min ...

    c语言经典案例

    实例199 创建双向链表 284 实例200 创建循环链表 287 实例201 使用头插入法建立单链表 289 实例202 双链表逆序输出 291 实例203 约瑟夫环 293 实例204 创建顺序表并插入元素 294 实例205 合并两个链表 296 实例206 ...

Global site tag (gtag.js) - Google Analytics