zoukankan      html  css  js  c++  java
  • 【编程题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印

    第 16 题(树):
    题目(微软):
    输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
    例如输入
    8
    /
    6 10
    / /
    5 7 9 11
    输出 8 6 10 5 7 9 11。

    思路:之前做USACO和学算法的时候经常用的 广度优先搜索

      1 /*
      2 第 16 题(树):
      3 题目(微软):
      4 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 
      5 例如输入
      6    8
      7  /   
      8 6    10
      9 /  /  
     10 5 7 9 11
     11 输出 8 6 10 5 7 9 11。
     12 start time = 19: 10
     13 end time = 19:36
     14 */
     15 
     16 
     17 //思路 广度优先遍历
     18 #include <iostream>
     19 #include <queue>
     20 #include <stdlib.h>
     21 using namespace std;
     22 
     23 typedef struct BSTreeNode
     24 {
     25 int m_nValue; // value of node
     26 BSTreeNode *m_pLeft; // left child of node
     27 BSTreeNode *m_pRight; // right child of node
     28 }BSTreeNode;
     29 
     30 int addBSTreeNode(BSTreeNode * &T, int data)  //把data加入的以T为根的树中
     31 {
     32     if(T == NULL) //根节点单独处理
     33     {
     34         T = (BSTreeNode *)malloc(sizeof(BSTreeNode));
     35         T->m_nValue = data;
     36         T->m_pLeft = NULL;
     37         T->m_pRight = NULL;
     38     }
     39     else
     40     {
     41         BSTreeNode * x = T;
     42         BSTreeNode * px = NULL;
     43         while(x != NULL)
     44         {
     45             if(data >= x->m_nValue)
     46             {
     47                 px = x;
     48                 x = x->m_pRight;
     49             }
     50             else
     51             {
     52                 px = x;
     53                 x = x->m_pLeft;
     54             }
     55         }
     56 
     57         if(data >= px->m_nValue)
     58         {
     59             px->m_pRight = (BSTreeNode *)malloc(sizeof(BSTreeNode));
     60             px->m_pRight->m_nValue = data;
     61             px->m_pRight->m_pLeft = NULL;
     62             px->m_pRight->m_pRight = NULL;
     63         }
     64         else
     65         {
     66             px->m_pLeft = (BSTreeNode *)malloc(sizeof(BSTreeNode));
     67             px->m_pLeft->m_nValue = data;
     68             px->m_pLeft->m_pLeft = NULL;
     69             px->m_pLeft->m_pRight = NULL;
     70         }
     71     }
     72     return 1;
     73 }
     74 
     75 int BFSPrintTree(BSTreeNode * T)
     76 {
     77     queue<BSTreeNode *> Q;
     78     Q.push(T);
     79 
     80     while(!Q.empty())
     81     {
     82         BSTreeNode * x = Q.front();
     83         Q.pop();
     84         printf("%d ", x->m_nValue);
     85         if(x->m_pLeft != NULL)
     86         {
     87             Q.push(x->m_pLeft);
     88         }
     89         if(x->m_pRight != NULL)
     90         {
     91             Q.push(x->m_pRight);
     92         }
     93         
     94     }
     95     return 1;
     96 }
     97 
     98 int main()
     99 {
    100     BSTreeNode * T = NULL;
    101     addBSTreeNode(T, 8);
    102     addBSTreeNode(T, 6);
    103     addBSTreeNode(T, 10);
    104     addBSTreeNode(T, 5);
    105     addBSTreeNode(T, 7);
    106     addBSTreeNode(T, 9);
    107     addBSTreeNode(T, 11);
    108 
    109     BFSPrintTree(T);
    110     return 0;
    111 
    112 }
    View Code
  • 相关阅读:
    用户体验
    dwz中权限控制与跳转(转)
    synchronized详解
    CodeIgniter笔记
    linux,apache,php,mysql常用的查看版本信息的方法
    dwz中展开左侧菜单的指定列表
    Apache与Nginx的优缺点比较(转)
    如何在Oracle中复制表结构和表数据 【转载】
    apache配置虚拟主机
    Disallowed Key Characters(转)
  • 原文地址:https://www.cnblogs.com/dplearning/p/3890877.html
Copyright © 2011-2022 走看看