zoukankan      html  css  js  c++  java
  • 二叉树转双向链表问题

    问题由来:

    输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。

    要求不能创建任何新的结点,只调整指针的指向。

    10

    / /

    6  14

    / / / /

    4  8 12 16

    转换成双向链表

    4=6=8=10=12=14=16。

    ————————————————————————————————————————————————————————

    查询了一些资料,有人说这问题就是二叉树的线索化过程。这里我个人觉得不是。理由如下:

    1、线索二叉树中,确实其中存在的是双向线索链表,理解为一种需要简单处理的双向线索链表;(如:当右指针为线索时,直接继承后继,如果右指针为子树时,需要递归找寻右子树的最左边子节点的处理)

    2、双向链表,理解为直接继承后继,一直到链表为空。简单的后继后继就成的。

    3、构建过程也不一样:

    (3.1 )二叉树线索化的思想: 保存两个关键的指针:pre指针(上一次访问的指针)和current指针;当current->lchild为空时,current->lchild = pre; 当pre ->rchild为空时,pre->rchild = current; 然后,执行pre = current;当中序遍历结束时,二叉搜索树也被线索化了。

    (3.2 )二叉树转换为双向链表的思想: 保存两个关键的指针:pre指针(上一次访问的指针)和T指针;对于每一个节点,执行T->lchild = prepre;pre->rchild = T; 然后执行pre = T;当中序遍历结束时,二叉搜索树也被转化为双链表了。

    ————————————————————————————————————————————————————————

    下面贴出两者的代码 

     1 void BiTreeToLinklist(BiTree &T)  // change tree to linklist
     2 {
     3     if(T != NULL) // 双向链表化
     4     {
     5         BiTreeToLinklist(T->lchild);
     6         T->lchild = pre;
     7         pre->rchild = T;
     8         pre = T;
     9         BiTreeToLinklist(T->rchild);
    10     }
    11 }
  • 相关阅读:
    System.IO.FileLoadException异常
    sql server 中文乱码
    WebMethod 属性
    解决局域网内无法IP访问IIS已发布的网站
    设备综合效率OEE
    一个可以学习工厂智能制造的公司网站-----太友科技
    groovy动态类型--能力式设计
    groovy对枚举的支持
    groovy实现循环、交换变量、多赋值、?.运算符
    规则引擎
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2407528.html
Copyright © 2011-2022 走看看