548 - Tree uva - 深搜 + 建树
2014-04-15 01:06
369 查看
参考:
/article/1632576.html
/article/1632576.html
// 由中序和后序遍历序列进行建树, 返回根结点指针 Node * InPostCreateTree(int *mid,int *post,int len){ if(len == 0) return NULL; int i=len-1; while(post[len-1] != mid[i]) --i; Node *h=NewNode(); h->data=post[len-1]; h->left=InPostCreateTree(mid,post,i); h->right=InPostCreateTree(mid+i+1,post+i,len-i-1); return h; } // 由前序和中序遍历序列进行建树, 返回根结点的指针 Node * PreInCreateTree(int *mid,int *pre,int len) //n标识s2的长度 { if(len==0) return NULL; int i = 0; while(*mid != pre[i]) ++i; Node *h=NewNode(); h->data= *mid; h->left = PreInCreateTree(mid+1, pre, i); h->right = PreInCreateTree(mid+i+1, pre+i+1, len-i-1); return h; }
#include<cstdio> #include<cstring> #include<iostream> #include<malloc.h> #include<algorithm> using namespace std; #define MAX_SIZE 10000 + 100 struct Tree { int value; Tree *left; Tree *right; } ; int n; int MAX; int fin; int mid[MAX_SIZE] , post[MAX_SIZE]; Tree *BuildTree(int *mid,int *post,int len){ if( len == 0 ) return NULL; int pos = len - 1; Tree * node; node = (Tree *)malloc(sizeof(Tree)); while(post[len-1]!=mid[pos]) pos--; node->value = post[len-1]; node ->left = BuildTree(mid,post,pos); node ->right = BuildTree(mid+pos+1,post+pos,len-pos-1); return node; } void dfs(Tree *node,int sum){/*深度遍历*/ if(node->left!=NULL){ sum+=(node->left)->value; dfs(node->left,sum); sum-=(node->left)->value; } if(node->right!=NULL){ sum+=(node->right)->value; dfs(node->right,sum); sum-=(node->right)->value; } if(node->left==NULL&&node->right==NULL){ if(sum<MAX){ MAX=sum; fin=node->value; } else if(sum==MAX&&fin>node->value){ fin=node->value; } return ; } } int main(){ n=0; char t; while(scanf("%d%c",&mid[n++],&t)!=EOF){ if(t=='\n'); else while(scanf("%d%c",&mid[n++],&t)&&t!='\n'); for(int i=0;i<n;i++) scanf("%d",&post[i]); Tree *root;/*定义根的节点*/ root = BuildTree(mid,post,n); /*第一对数是中序遍历,第二对是后序遍历*/ MAX = 200000000; fin = root -> value; dfs(root,root->value); printf("%d\n",fin); n=0; memset(mid,0,sizeof(mid)); memset(post,0,sizeof(post)); } return 0; }
相关文章推荐
- UVA 548 Tree(二叉树建树)
- Uva548 Tree 【递归建树+dfs遍历树】【例题6-8】
- UVA 548 Tree(建树树的遍历)
- UVA548——Tree(中后序建树+DFS)
- UVa 548 Tree(建树,递归遍历)
- UVa 548 Tree 根据后序遍历和中序遍历建树后DFS
- UVA - 548 Tree
- UVA - 548 Tree
- UVa 548 Tree
- UVA 548 - Tree
- 指针建树uva548
- 例题6-8 树 Tree UVa 548 中序遍历+后序遍历建树
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- UVa 548 - Tree
- UVa 548 - Tree
- 548 - Tree (UVa OJ)
- UVa 548 Tree
- uva 548 Tree
- uva548 Tree
- uva 548 Tree