2018.9 快手筆試程式設計題
阿新 • • 發佈:2018-12-11
題目描述:給你二叉樹的先序和中序遍歷的值,求出中序遍歷的求和樹。每個節點的和等於其左右孩子節點的value的和。
思路:先建樹,直接遞迴求和輸出就好了。。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; using namespace std; const int MAXN = 55; int pre[MAXN]; int in[MAXN]; char str[MAXN]; int flag; struct node { int sum; int value; node *left, *right; }*root; node *create(int len, int *in, int *pre) { if(len==0) return NULL; node *p = new node; int x=0; while(*(in+x)!=*pre) x++; p->sum=0; p->value=pre[0]; p->left=create(x,in,pre+1); p->right=create(len-1-x,in+x+1,pre+x+1); return p; } void print(node* r) { if(r==NULL) return ; print(r->left); if(!flag) { printf("%d", r->sum); flag=1; } else printf(" %d", r->sum); print(r->right); } int bfs(node* r) { if(r==NULL) return 0; if(r->left!=NULL) { r->sum+=bfs(r->left); r->sum+=r->left->value; } if(r->right!=NULL) { r->sum+=bfs(r->right); r->sum+=r->right->value; } return r->sum; } int main() { int n; scanf("%d", &n); for(int i=0;i<n;++i) scanf("%d", &pre[i]); for(int i=0;i<n;++i) scanf("%d", &in[i]); root=create(n, in, pre); bfs(root); print(root); return 0; }