548 - Tree***

本文介绍如何根据中序和后序遍历构建二叉树,并找到从根节点到叶子节点路径中最短的那个。文章包含完整的C++实现代码,展示了节点结构定义、构建树的过程及递归遍历算法。
/* 题意: 给出中序和后序数据,创建一颗二叉树。 再根据从根到叶子的路径长,输出路经最短的那个叶子节点 纠错时,自己测试一组数据。 效果+1 */ #include <iostream> #include <string> #include <cstring> #include <cstdio> #include <sstream> using namespace std; struct Node { Node *lchild,*rchild; int v; Node() { lchild=rchild=NULL; v=0; } }; int inorder[10010],postorder[10010]; int result,value,min_value; string a,b; int len; int init() { istringstream a_in(a); istringstream b_in(b); int temp; len=0; while(a_in>>temp) inorder[len++]=temp; len=0; while(b_in>>temp) postorder[len++]=temp; return len; } int getPos(int c,int *t) { for(int i=0;i<len;i++) if(c==t[i]) return i; return 0; } Node *createTree(int n,int *t1,int *t2) { if(n<=0) return NULL; Node *root=new Node; root->v=t2[n-1]; int pos=getPos(t2[n-1],t1); root->lchild=createTree(pos,t1,t2); root->rchild=createTree(n-pos-1,t1+pos+1,t2+pos); return root; } void traverse(Node *root) { value+=root->v; if(root->lchild==NULL && root->rchild==NULL) { if(value<min_value) { min_value=value; result=root->v; } //In the case of multiple paths of least value you should pick the one with the least value on the terminal node. //原先没有考虑也通过了,数据太弱了。 else if(value==min_value) { result=result<root->v?result:root->v; } } if(root->lchild!=NULL) { traverse(root->lchild); } if(root->rchild!=NULL) { traverse(root->rchild); } value-=root->v; //如果不使用回溯,将value设置成形参也可 } int main() { //freopen("data.in","r",stdin); while(getline(cin,a) && getline(cin,b)) { int len=init(); Node *root=createTree(len,inorder,postorder); min_value=1000000000; value=0; result=0; traverse(root); printf("%d\n",result); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值