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 #include <cstdio>
     2 #include <cstdlib>
     3 #include <iostream>
     4 using namespace std;
     5 struct BSTreeNode
     6 {
     7     int m_nValue; // value of node
     8     BSTreeNode *m_pLeft; // left child of node
     9     BSTreeNode *m_pRight; // right child of node
    10 };
    11 BSTreeNode *pHead = NULL;//头节点
    12 BSTreeNode *preNode = NULL; //前一个节点
    13 //构造二元查找树
    14 void BSTree_Create(BSTreeNode *&pRoot,int value)//在这个函数中指针要改变,注意用引用传递
    15 {
    16     if(pRoot == NULL)
    17     {
    18         BSTreeNode *p = new BSTreeNode();
    19         p->m_nValue = value;
    20         p->m_pRight = NULL;
    21         p->m_pLeft = NULL;
    22         pRoot = p;
    23     }
    24     else if(pRoot->m_nValue < value)
    25     {
    26         BSTree_Create(pRoot->m_pRight,value);
    27     }
    28     else if(pRoot->m_nValue > value)
    29     {
    30         BSTree_Create(pRoot->m_pLeft,value);
    31     }
    32     else
    33     {
    34         printf("no node
    ");
    35     }
    36 }
    37 void inOrderBST(BSTreeNode *p)
    38 {
    39     if(p == NULL)
    40     {
    41         return ;
    42     }
    43     //遍历左子树
    44     if(p->m_pLeft != NULL)
    45     {
    46         inOrderBST(p->m_pLeft);
    47     }
    48 
    49     //转换节点
    50     p->m_pLeft = preNode;//左节点指向前一个节点
    51     if(preNode == NULL)//左节点指向头节点
    52     {
    53         pHead=p;
    54     }
    55     else//使节点的最后一个节点右指针指向当前结点
    56     {
    57         preNode->m_pRight=p;
    58     }
    59     preNode = p;//当前节点为最后节点
    60     cout<<p->m_nValue<<" ";
    61 
    62     //遍历右子树
    63     if(p->m_pRight!= NULL)
    64     {
    65         inOrderBST(p->m_pRight);
    66     }
    67 
    68 }
    69 int main()
    70 {
    71     BSTreeNode *p1 = new BSTreeNode();
    72     BSTree_Create(p1,10);
    73     BSTree_Create(p1,6);
    74     BSTree_Create(p1,14);
    75     BSTree_Create(p1,4);
    76     BSTree_Create(p1,8);
    77     BSTree_Create(p1,12);
    78     BSTree_Create(p1,16);
    79     inOrderBST(p1);
    80 }
  • 相关阅读:
    一些关于HDFS的基本知识
    WordPress使用子主题继承和修改主题
    IQueryable、IQueryProvider接口详解
    FM并发编程练习:改写苏飞的C#多线程网站压力测试程序
    利用Webkit抓取动态网页和链接
    HTTP协议之代理
    PortalBasic Java Web 应用开发框架 v3.0.1 即将发布
    算法导论1.排序算法
    CSS题目 子元素决定父元素的大小
    使用solrj和EasyNet.Solr进行原子更新
  • 原文地址:https://www.cnblogs.com/sxmcACM/p/4509338.html
Copyright © 2011-2022 走看看