高中学编程吗?

闻博鸿闻博鸿最佳答案最佳答案

先贴代码,证明不是来水经验的。 刚参加完信息学奥赛的湖南省复赛,题目是手写一个二叉树的遍历器(非递归),因为时间限制,只用C++写了代码,没有用数据结构框架(比如STL、BOOST等等),也没有用模板,纯手写的类,函数,动态分配。

在比赛过程中遇到了很多各种各样的问题,最后终于搞定了,虽然速度不算快但是过了,这里把问题以及解决的方案总结一下。 如果需要完整代码可以在我的专栏里找。 遇到的问题及解决方案如下:

1. 在函数中定义对象时,发现不能访问非静态成员变量,也不能调用非静态成员函数。 解决方案:在类外面(也就是在main()之前)初始化所有需要的变量,这样就可以在函数内直接使用。

3. 无法通过指针指向二叉树结点,认为指针为空。 解决方法:将结点的赋值改为: new_node->left=temp; new_node->right=temp;

4. 二叉树的前序、中序、后序遍历结果不对。 解决方法一:修改代码,增加新的函数,用来返回当前结点所在层的下标。这样就可以在不破坏遍历顺序的前提下,得到每个节点在整个二叉树中的位置。 解决方法二:不追加函数,直接在循环里修改i的值,每次加2。

5. 不能根据前序遍历和中序遍历建立二叉树。 解决方法:在建立二叉树的时候,如果当前结点为NULL,则先创建新结点并赋值,再插入到双指针法数的末尾,否则不用管。这样就不会出现中间指针未找到的情况了。

6. 运行很慢或者崩溃,内存泄露。 解决方案:检查代码是否有漏洞,我是因为在删除树的时候没有释放new产生的泄漏。另外,如果是用VS2008,请不要勾选优化项目里的“最大化堆栈使用”,这个会减慢程序运行的速度且没有什么好处。

我来回答
请发表正能量的言论,文明评论!