二叉树4(天平问题)

二叉树的深度遍历

输入一个树状天平,根据力矩相等原则判断是否平衡。平衡输出YES,否则输出NO。所谓力矩相等,就是,其中和分别为左右两边砝码的重量,D为距离。

采用递归(先序)方式输入:每个天平的格式为,,,,当或为0时,表示该“砝码”实际是一个子天平,接下来会描述这个子天平。当时,会先描述左子天平,然后是右子天平。

 

例如输入:

0 2 0 4

0 3 0 1

1 1 1 1

2 4 4 2

1 6 3 2

输出:

YES

#include"iostream"
using namespace std;
struct Tree{
    int data,edge;
    Tree *left;
    Tree *right;
};
void tree(Tree* &t,int data,int edge){
    t = new Tree;
    t->data = data;
    t->edge = edge;
    t->left = NULL;
    t->right = NULL;
}
void createTree(Tree* &t){
    int datal,datar,edge;
    cin>>datal>>edge;
    tree(t->left,datal,edge);
    cin>>datar>>edge;
    tree(t->right,datar,edge);
    if(datal == 0){
        createTree(t->left);
    }
    if(datar == 0){
        createTree(t->right);
    }
}
int torque(Tree *t){
    if(t->right==NULL){
        return t->data;
    }
    else if(t){
        int l = torque(t->left);
        int r = torque(t->right);
        if(l && r && r * t->right->edge == l * t->left->edge){
            return r + l;
        }
    }
    return 0;
}
int main(){
    Tree *t = new Tree;
    tree(t,0,0);
    createTree(t);
    if(torque(t)){
        cout<<"YES"<<endl;
    }
    else{
        cout<<"NO"<<endl;
    }
    return 0;
}

/*
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2

*/

 

posted @ 2018-05-12 13:13  oleolema  阅读(189)  评论(0编辑  收藏  举报