uva548 二叉树问题 Runtime Error看过来!
来源:互联网 发布:大学生借款软件 编辑:程序博客网 时间:2024/05/21 17:25
第一次练习二叉树的相关操作,还是很有收获,期间遇到了几个问题。
1、在delete节点时判断if(pNode==NULL)没用,不清楚为何,遂改了写法
2、全局变量写在类外时,类内的函数不能直接用,如果定义在类内是可以的,只不过在main函数中要加tree.引用
3、看网上的做法都是先建树,再dfs求路径最短,而我定义了一个sum域,保存根节点到该节点的路径和,如果判断该节点是叶子节点,则将sum与最小值Min比较,同时将节点加入vector中,进而可以求得路径和相同时哪个叶子节点的id最小。
4、注意动态数组申请及释放的写法,第一次就写错了!int* arr=new int【maxn】,delete【】arr;
5、runtime error就不知道该怎么改了。。。
#include<iostream>#include<cstring>#include<vector>using namespace std;struct Node{int id;int sum;Node* left;Node* right;};class Tree{public:Node* root;vector<Node*> nvec;int Min;Tree(){root=new Node;Min=10000;}void clear(Node* pNode);~Tree(){clear(root);}void build(Node* pNode,int n,int sum,int* s1,int* s2);//s1后序遍历,s2中序遍历void convert(int* arr,int len);int indexof(int* arr,int tar);};int Tree::indexof(int* arr,int tar){int i=0;while(1){if (arr[i]==tar){return i;}i++;}}void Tree::convert(int* arr,int len){for (int i=0;i<len/2;i++){int tmp=arr[i];arr[i]=arr[len-1-i];arr[len-1-i]=tmp;}}void Tree::clear(Node* pNode){if (pNode->id<0)delete pNode;else{clear(pNode->left);clear(pNode->right);}}void Tree::build(Node* pNode,int n,int sum,int* s1,int* s2){if (n<=0) {pNode=NULL;return;}pNode->id=s1[0];pNode->sum=sum+pNode->id;int p=indexof(s2,s1[0]);if (p<=0&&n-p-1<=0){nvec.push_back(pNode);if (pNode->sum<=Min){Min=pNode->sum;}}pNode->left= new Node;pNode->right= new Node;build(pNode->right,n-p-1,pNode->sum,s1+1,s2+p+1);build(pNode->left,p,pNode->sum,s1+n-p,s2);}#define MAXN 10001int main(){int tmp;while(cin>>tmp){int *inorder=new int[MAXN];int *postorder=new int[MAXN];inorder[0]=tmp;int dex=1;char ch=cin.get();while(ch==' '){cin>>inorder[dex++];ch=cin.get();}for (int i=0;i<dex;i++){cin>>postorder[i];}Tree tree;tree.convert(postorder,dex);tree.build(tree.root,dex,0,postorder,inorder);int* nodevalue=new int[MAXN];int index=0;for (int i=0;i<tree.nvec.size();i++){if (tree.nvec[i]->sum==tree.Min){nodevalue[index++]=tree.nvec[i]->id;}}int min=nodevalue[0];for (int j=0;j<index;j++){if (nodevalue[j]<min) min=nodevalue[j];}cout<<min<<endl;delete[] inorder;delete[] postorder;delete[] nodevalue;}return 0;}
- uva548 二叉树问题 Runtime Error看过来!
- UVA548 二叉树
- Uva548 Tree 二叉树遍历
- UVA548 中序后序构造二叉树
- UVA548 Tree(DFS,二叉树)
- uva657 persentation error的看过来!
- 【日常学习】【二叉树遍历】Uva548 - Tree题解
- uva548--tree(二叉树的递归遍历)
- 算法入门经典二叉树DFS题目UVA548 Tree
- 例题6-8 二叉树的递归遍历 uva548
- Runtime Error问题
- matlab-runtime error问题
- Runtime Error R6016问题
- uva548(树)
- UVa548 树 题解
- VS2003 R6025 RUNTIME ERROR 问题
- Matlab中Runtime Error问题
- 关于Runtime Error的问题
- 【iOS-cocos2d-X 游戏开发之五】游戏存储之Cocos2dX自带CCUserDefault类详解;
- 关于eclipse没有代码提示解决方法
- 求职心情
- javaweb之Filter详解
- R-让函数返回多个对象
- uva548 二叉树问题 Runtime Error看过来!
- org.hibernate.MappingException: Unknown entity: com.fei.model.Student
- ExtJS做的一个信息管理界面。每一句都带有注释,可以当教科书用
- 如何去掉OO方法中的ALV的标准按钮
- 网络流 练习
- Zirco-browser:超越海豚的开源浏览器 http://www.apkbus.com/android-44306-1-1.html (出处: Android开发论坛 - 安卓开发论坛 - An
- Oracle 11g R2( + RAC) 安装 系统用户组 配置 说明
- Smarty的常用东东
- Python开发技术详解-笔记_第06章-字符串与正则表达式