按中序遍历和后序遍历给出一棵二叉树,求这棵二叉树中叶子节点权值的最小值。
输入保证叶子节点的权值各不相同。
标签:root treenode ios stream 测试数据 oid while sam make
按中序遍历和后序遍历给出一棵二叉树,求这棵二叉树中叶子节点权值的最小值。
输入保证叶子节点的权值各不相同。
#include<iostream> using namespace std; class BitreeNode { public: int data; BitreeNode *left; BitreeNode *right; BitreeNode() { left=right=NULL; } }; class Bitree { public: BitreeNode *Root; int * inorder; int * pastorder; int len; int Min; Bitree(int n,int *i,int *p) { Min=99999; inorder=i; pastorder=p; len=n; Root=makeTree(0,len-1,len-1); } BitreeNode *makeTree(int inleft,int inright,int root) { if(inright<inleft) { return NULL; } int newroot; BitreeNode *T=new BitreeNode(); for(int i=inleft;i<=inright;i++) { if(inorder[i]==pastorder[root]) { newroot=i; break; } } T->data=pastorder[root]; T->left=makeTree(inleft,newroot-1,root-1-(inright-newroot)); T->right=makeTree(newroot+1,inright,root-1); return T; } void Pre(BitreeNode *p) { if(p!=NULL) { if(p->left==NULL&&p->right==NULL) { if(p->data<Min) Min=p->data; } Pre(p->left); Pre(p->right); } } }; int main() { int n; while(cin>>n) { int inorder[10001],pastorder[10001]; for(int i=0;i<n;i++) cin>>inorder[i]; for(int i=0;i<n;i++) cin>>pastorder[i]; Bitree T(n,inorder,pastorder); T.Pre(T.Root); cout<<T.Min<<endl; } return 0; }
标签:root treenode ios stream 测试数据 oid while sam make
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180845.html