UVA 839 & UVA699
阿新 • • 發佈:2018-12-19
二叉樹DFS
1.遞迴建樹+在樹上遞迴計算答案 839
2.直接遞迴計算答案 699
UVA 839
這題注意一下輸出格式就好了
#include<cstdio> #include<cstdlib> using namespace std; struct Node{ int w,d; Node *right,*left; }; Node *newnode(void) { Node *T=new Node; T->d=T->w=0; T->left=T->right=NULL; return T; } Node * Build(Node *T)//遞迴建樹 { int wl=0,dl=0,wr=0,dr=0; scanf ("%d %d %d %d",&wl,&dl,&wr,&dr); if (wl==0)//描述子天平 { T->left=newnode(); T->left->d=dl; T->left=Build(T->left); } else { T->left=newnode(); T->left->w=wl; T->left->d=dl; } if (wr==0) { T->right=newnode(); T->right->d=dr; T->right=Build(T->right); } else { T->right=newnode(); T->right->w=wr; T->right->d=dr; } if (T->w==0&&T->left!=NULL&&T->right!=NULL) T->w=T->right->w+T->left->w; return T; } bool DFS(Node *T)//遞迴計算 { if (T->left==NULL&&T->right==NULL) return true; else if (T->left!=NULL&&T->right!=NULL) { if (DFS(T->left)&&DFS(T->right)&&T->left->w*T->left->d==T->right->w*T->right->d) return true; else return false; } } void PreOrder(Node *T) { if (T==NULL) return ; printf ("%d\n",T->w); PreOrder(T->left); PreOrder(T->right); } int main() { int n; scanf ("%d",&n); while(n--) { Node *T=newnode(); T=Build(T); if (DFS(T)) printf ("YES\n"); else printf ("NO\n"); delete T; if (n!=0) printf ("\n"); } return 0; }
UVA 699
這題沒建樹,直接開兩個陣列存值就行了
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int l,r; const int MAXN=1000; int L[MAXN],R[MAXN]; void DFS(int num) { int x,y; scanf ("%d",&x);// 左子樹 if (x!=-1) { int a=num-1; if (a<0) { L[-a]+=x; l=min(l,a); } else if (a>0) { R[a]+=x; r=max(r,a); } else L[0]+=x; DFS(a); } scanf ("%d",&y);//右子樹 if (y!=-1) { int a=num+1; if (a<0) { L[-a]+=y; l=min(l,a); } else if (a>0) { R[a]+=y; r=max(r,a); } else L[0]+=y; DFS(a); } } int main() { int n,Case=1,x; while (~scanf ("%d",&n) && n!=-1) { memset(L,0,sizeof(L)); memset(R,0,sizeof(R)); L[0]=n; l=r=0; DFS(0); printf ("Case %d:\n",Case++); printf ("%d",L[-l]); for (int i=-l-1;i>=0;i--) { printf (" %d",L[i]); } for (int i=1;i<=r;i++) { printf (" %d",R[i]); } printf("\n\n"); } return 0; }