zoukankan      html  css  js  c++  java
  • 1102. Invert a Binary Tree (25)

    The following is from Max Howell @twitter:

    Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off.

    Now it's your turn to prove that YOU CAN invert a binary tree!

    Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N (<=10) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N-1. Then N lines follow, each corresponds to a node from 0 to N-1, and gives the indices of the left and right children of the node. If the child does not exist, a "-" will be put at the position. Any pair of children are separated by a space.

    Output Specification:

    For each test case, print in the first line the level-order, and then in the second line the in-order traversal sequences of the inverted tree. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.

    Sample Input:
    8
    1 -
    - -
    0 -
    2 7
    - -
    - -
    5 -
    4 6
    
    Sample Output:
    3 7 2 6 4 0 5 1
    6 5 7 4 3 2 0 1
    

    代码:
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <iomanip>
    
    using namespace std;
    struct tree
    {
        int l,r;
    }s[10];
    int n,v[10],head,flag = 0;
    char a,b;
    void invert(int head)
    {
        if(head == -1)return;
        invert(s[head].l);
        invert(s[head].r);
        swap(s[head].l,s[head].r);
    }
    void in_order(int head)
    {
        if(head == -1)return;
        in_order(s[head].l);
        if(flag)printf(" %d",head);
        else printf("%d",head);
        flag ++;
        in_order(s[head].r);
    }
    void level_order(int head)
    {
        int q[10],he = 0,ta = 0;
        if(head == -1)return ;
        q[ta ++] = head;
        while(he < ta)
        {
            int i = q[he];
            if(s[i].l != -1)q[ta ++] = s[i].l;
            if(s[i].r != -1)q[ta ++] = s[i].r;
            if(he)cout<<' '<<q[he ++];
            else cout<<q[he ++];
        }
        cout<<endl;
    }
    int main()
    {
        cin>>n;
        for(int i = 0;i < n;i ++)
        {
            cin>>a>>b;
            if(a != '-')s[i].l = a - '0',v[s[i].l] = 1;
            else s[i].l = -1;
            if(b != '-')s[i].r = b - '0',v[s[i].r] = 1;
            else s[i].r = -1;
        }
        for(int i = 0;i < n;i ++)
        if(!v[i])
        {
            head = i;
            break;
        }
        invert(head);
        level_order(head);
        in_order(head);
    }
  • 相关阅读:
    gdb段错误
    gdb断点
    init.d详解
    asp.net中的服务器端控件 textbox 设为只读属性后无法获取 javascript给其赋的值
    关于“金点子”征集通知
    Notepad++ SQL Assistant
    IoC Container Benchmark Unity, Windsor, StructureMap and Spring.NET
    如何判断个人电脑是多少位(32位?还是64位系统)
    批量执行SQL文件
    SQL Server 2005 dev 开发板 版本说明
  • 原文地址:https://www.cnblogs.com/8023spz/p/8413475.html
Copyright © 2011-2022 走看看