zoukankan      html  css  js  c++  java
  • 微软面试题1、把二元查找树转变成排序的双向链表

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

    首先我们定义的二元查找树 节点的数据结构如下:
     struct BSTreeNode
    {
      int m_nValue; // value of node
      BSTreeNode *m_pLeft; // left child of node
      BSTreeNode *m_pRight; // right child of node
    };

    基本思路1:(这个有新节点,用递归,见思路2)

    中序遍历二叉树,指针pTree执行当前节点,pFomer指向前一节点,初始为NULL

    对出栈节点的操作,p指向从栈顶弹出的节点

    pTree->m_pLeft=pFormer;

    pFormer->m_pRight=p;

    pFomer=pTree;

    算法:

     1 View Code 
     2  BSTreeNode * BinTreeToLinkList(BSTreeNode* BT){
     3      Stack S;
     4      BSTreeNode* pTree=BT;
     5      BSTreeNode*list=NULL,*pFormer=NULL;
     6      while(pTree!=NULL||!isEmptyStack(S)){
     7          if(pTree!=NULL){
     8              Push(S,pTree);
     9              pTree=pTree->m_pLeft;
    10          }else{
    11              pTree=Top(S);
    12              if(list==NULL){
    13                  list=pTree;
    14                  pFormer=pTree;
    15              }else{
    16                  pFormer->m_pRight=pTree;
    17                  pTree->m_pLeft=pFormer;
    18                  pFormer=pTree;
    19              }
    20              pTree=pTree->m_pRight;
    21              Pop(S);
    22          }
    23      }
    24      return list;
    25  }

     为了能够达到要求,只能用中序遍历递归算法了(我一般不用递归的)

    基本思路2:和1一样,递归出来的结点顺序就是链表的顺序,往里面加就是了,同样需要list,pFormer

    算法:

     BintTree linkList=NULL;//全局变量
     BintTree pFormer=NULL;
     void BinTreeToLinkList(BitTree BT){
           if(BT!=NULL){
                BinTreeToLinkList(BT->lchild);
                if(linkList=NULL){
                    linkList=BT;
                    pFormer=BT;
               }else{
                   pFomer->rchild=BT;
                   BT->lchild=pFormer;
                   pFormer=BT;
               }
               BinTreeToLinkList(BT->rchild);
           } 
    }
  • 相关阅读:
    WIDER Face 转为 COCO 格式标签
    latex转word
    No CUDA runtime is found, using CUDA_HOME='/usr/local/cuda'
    COCO数据集使用super categories时出现IndexError: list index out of range
    VS Code 中 torch has no xxx member
    Anaconda中安装Cascade RCNN(Detectron)的若干问题
    fatal error: nvcuvid.h: No such file
    hive一些语句
    端口号
    hadoop错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
  • 原文地址:https://www.cnblogs.com/GoAhead/p/2516473.html
Copyright © 2011-2022 走看看