zoukankan      html  css  js  c++  java
  • [Jobdu] 题目1521:二叉树的镜像

    不知道怎么回事下面的代码通过了4个测试用例,还有1个测试用例始终是Runtime Error,各位帮我看一下是哪里出了问题

    镜像输出两种方法,一种是递归进行调整,另外一种就是直接在先序遍历的基础上进行改造,下面代码中实现的是第二种

     1 #include <cstdio>
     2 #include <cstdlib>
     3 
     4 typedef struct BTNode{
     5     int key;
     6     struct BTNode *lchild;
     7     struct BTNode *rchild;
     8 }BTNode;
     9 
    10 BTNode *createBinaryTree(int a[], int n) {
    11     BTNode *nodes[n];
    12     for (int i = 0; i < n; ++i) {
    13         nodes[i] = (BTNode *) malloc(sizeof(BTNode));
    14         nodes[i]->key = a[i];
    15         nodes[i]->lchild = NULL;
    16         nodes[i]->rchild = NULL;
    17     }
    18 
    19     for (int i = 0; i < n; ++i) {
    20         char str[10];
    21         scanf("%s", str);
    22         if (str[0] == 'd') {
    23             int left, right;
    24             scanf("%d %d", &left, &right);
    25             nodes[i]->lchild = nodes[left - 1];
    26             nodes[i]->rchild = nodes[right - 1];
    27         } else if (str[0] == 'l') {
    28             int left;
    29             scanf("%d", &left);
    30             nodes[i]->lchild = nodes[left - 1];
    31         } else if (str[0] == 'r') {
    32             int right;
    33             scanf("%d", &right);
    34             nodes[i]->rchild = nodes[right - 1];
    35         }
    36     }
    37 
    38     return nodes[0];
    39 }
    40 
    41 /*
    42 void getTreeMirror(BTNode *root) {
    43     if (!root)
    44         return;
    45     if (!root->lchild && !root->rchild)
    46         return;
    47 
    48     BTNode *temp = root->lchild;
    49     root->lchild = root->rchild;
    50     root->rchild = temp;
    51 
    52     getTreeMirror(root->lchild);
    53     getTreeMirror(root->rchild);
    54 }*/
    55 
    56 void printTreeMirror(BTNode *root, int count) {
    57     if (root) {
    58         count == 0 ? printf("%d", root->key) : printf(" %d", root->key);
    59         printTreeMirror(root->lchild, count + 1);
    60         printTreeMirror(root->rchild, count + 1);
    61     }
    62 }
    63 
    64 int main() {
    65     int n;
    66     while (scanf("%d", &n) != EOF) {
    67         int a[n];
    68         for (int i = 0; i < n; i++)
    69             scanf("%d", &a[i]);
    70 
    71         BTNode *root = createBinaryTree(a, n);
    72         printTreeMirror(root, 0);
    73         printf("
    ");
    74     }
    75 
    76     return 0;
    77 }
    78 /**************************************************************
    79     Problem: 1521
    80     User: tonyhu
    81     Language: C++
    82     Result: Runtime Error
    83 ****************************************************************/
  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/tonyhu1993/p/4702674.html
Copyright © 2011-2022 走看看