二叉树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 */
BY oleolema