• Uva 839天平(二叉树dfs, 递归建树)


    题意:

    给定一个天平长度 输入格式为

    wl dl wr dr 

    分别代表天平左边长度,左边重量, 右边长度, 右边重量。

    如果重量为0, 说明下面还有一个天平, 递归给出。

    样例输入:
    1
    0 2 0 4
    0 3 0 1
    1 1 1 1
    2 4 4 2
    1 6 3 2

    如果天平是左右重量相等的 输出YES 否则输出NO。

    分析:

    既然以递归的定义输入, 那么我们程序最好写成递归建树,如果有重量是0, 那么就递归建左子树或者右子树 , 如果是叶子节点的父节点(这个天平下面没天平), 那么就判断左右是否相等返回即可(也可建一个全局变量, 一个不满足就可以输出NO了)。 我的程序是把树建造出来再判断, 有点冗余。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e6;
    struct Node{
      int wl,dl,wr,dr;
      int left, right;
      Node():wl(0),dl(0),wr(0),dr(0){}
    };
    Node tree[maxn];
    const int root = 1;
    int cnt = 0, ok;
    int build(int u){
        int wl,dl,dr,wr;
        scanf("%d %d %d %d",&wl,&dl,&wr,&dr);
        tree[u].wl = wl;
        tree[u].dl = dl;
        tree[u].wr = wr;
        tree[u].dr = dr;
        if(!wl) {
                tree[u].left = ++cnt;
                build(cnt);
        }
        if(!wr) {
                tree[u].right = ++cnt;
                build(cnt);
        }
    }
    int post(int u){
        if(!tree[u].wl) {
            tree[u].wl = post(tree[u].left);
        }
        if(!tree[u].wr) {
            tree[u].wr = post(tree[u].right);
        }
        if(tree[u].wl * tree[u].dl != tree[u].wr * tree[u].dr)
             ok = 0;
        return tree[u].wl + tree[u].wr;
    }
    int main(){
    
        int T;
        scanf("%d", &T);
        int flag = 0;
        while(T--){
            if(!flag){
                flag = 1;
            }
            else printf("
    ");
            cnt = root;
            build(root);
            ok = 1;
            post(root);
            printf("%s
    ",ok ? "YES":"NO");
        }
        return 0;
    }
  • 相关阅读:
    软工小白菜的团队介绍和采访
    团队作业第二次——团队Github实战训练
    团队作业第一次—团队展示和项目展示
    week5:Technology: Internets and Packets
    week3:History: The Web Makes it Easy to Use
    week2:History: The First Internet
    week4:History: Commercialization and Growth
    week1:History: Dawn of Electronic Computing
    第二日会议博客
    第一日会议博客
  • 原文地址:https://www.cnblogs.com/Jadon97/p/7205082.html
Copyright © 2020-2023  润新知