zoukankan      html  css  js  c++  java
  • 一道二叉查找树的应用题

    题目:

    建立一颗二叉查找树,输出每个节点的数值以及该节点的左右子树的数值。

    格式如下:

    输入格式:

    第一行输入一个正整数 N (1 <= N <= 1000),代表序列里元素个数。

    第二行输入 N 个正整数,代表序列 a 的 N 个元素(0 <= ai <= 10000)。保证序列里的元素值互不相同。

    输出格式:

    请按格式“a(b, c)”,输出引号之间的内容,a 代表每个结点的权值,b 代表其左孩子结点权值,c 代表右孩子结点权值,如果孩子结点为空,则输出“#”代替。一个结点输出一行,按结点的权值从小到大输出。注意输出“,”后面的空格。

    答案:

    二叉查找树的中序遍历是从小到大排列的,所以只用改变中序遍历代码即可

     1 #include<iostream>
     2 using namespace std;
     3 class Node {
     4 public:
     5     int data;
     6     Node *lchild, *rchild, *father;
     7     Node(int _data, Node *_father = NULL) {
     8         data = _data;
     9         lchild = NULL;
    10         rchild = NULL;
    11         father = _father;
    12     }
    13     ~Node() {
    14         if (lchild != NULL) {
    15             delete lchild;
    16         }
    17         if (rchild != NULL) {
    18             delete rchild;
    19         }
    20     }
    21     void insert(int value) {               //二叉查找树的插入(递归)
    22         if (value == data) {
    23             return;
    24         } else if (value > data) {
    25             if (rchild == NULL) {
    26                 rchild = new Node(value, this);
    27             } else {
    28                 rchild->insert(value);
    29             }
    30         } else {
    31             if (lchild == NULL) {
    32                 lchild = new Node(value, this);
    33             } else {
    34                 lchild->insert(value);
    35             }
    36         }
    37     }
    38     void inorder() {
    39          if (lchild != NULL) {
    40              lchild->inorder();
    41          }
    42          cout << data<<"(";
    43         if(this->lchild==NULL){
    44             cout<<"#";
    45         }
    46         else{
    47             cout<<this->lchild->data;
    48         }
    49          cout<<","<<" ";
    50         if(this->rchild==NULL){
    51             cout<<"#";
    52         }
    53         else{
    54             cout<<this->rchild->data;
    55         }
    56         cout<<")"<<endl;
    57          if (rchild != NULL) {
    58              rchild->inorder();
    59          }
    60      }
    61 };
    62 class BinaryTree {
    63 private:
    64     Node *root;
    65 public:
    66     BinaryTree() {
    67         root = NULL;
    68     }
    69     ~BinaryTree() {
    70         if (root != NULL) {
    71             delete root;
    72         }
    73     }
    74     void insert(int value) {
    75         if (root == NULL) {
    76             root = new Node(value);
    77         } else {
    78             root->insert(value);
    79         }
    80     }
    81     void inorder() {                           //中序
    82          root->inorder();
    83     }
    84 };
    85 int main() {
    86     BinaryTree binarytree;
    87     int n;
    88     cin>>n;
    89     int arr[n];
    90     for (int i = 0; i < n; i++) {
    91         cin>>arr[i];
    92         binarytree.insert(arr[i]);
    93     }
    94     binarytree.inorder();
    95     return 0;
    96 }
  • 相关阅读:
    SpringMVC的各种注解
    ThreadLocal的一些总结
    HashTable和HashMap
    SaxReader读取xml
    Java多线程(七):ReentrantLock
    Java多线程(六):wait(),notify()和notifyAll()
    Java多线程(五):死锁
    Java多线程(四):volatile
    Java多线程(三):synchronized
    每日一题,每日一字
  • 原文地址:https://www.cnblogs.com/Reindeer/p/5691776.html
Copyright © 2011-2022 走看看