天天看點

UVA 839

一道二叉樹的題,對于新手掌握處理先序序列有很大幫助,題主也是做了這道題對先序序列的處理更加熟練

題目就是給了很多行杠杆數,通過看圖可發現,每一個杠杆就是一個節點,得先判斷子節點是否平衡,并計算重量才能再來判斷父節點,明顯的”先進後出“(最先讀入的最後判斷)

#include<iostream>
#include<cstdio>
using namespace std;

bool Solve(int & w)//先序
{
	int wl, dl, wr, dr;
	bool left = true, right = true;
	cin >> wl >> dl >> wr >> dr;
	if (!wl)
	{
		left = Solve(wl);
	}
	if (!wr)
	{
		right = Solve(wr);
	}
	w = wl + wr;
	return left && right && (wl*dl == wr*dr);
}
int main()
{
	int n, w;
	cin >> n;
	while (n--)
	{
		if (Solve(w))
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
		if (n)//多組測試資料時,需要額外空一行
		{
			printf("\n");
		}
	}
	return 0;
}
           

繼續閱讀