2012年12月22日

摘要: 通过一棵树的先序和中序的遍历结果,重建这棵树。解题思路:还是递归,每一次在先序字符串中获得当前的根节点后,在中序字符串中找到它的位置,然后计算它的左子树和右子树对应的字符串开始与结束位置,并继续求它的左子树和右子树。重点是找清楚每次获得两个字符串的起始和结束位置!结束条件是开始位置大于结束位置,返回NULL;只有当节点的信息不重复时,才能正确地求得一棵的树。#include<iostream>#include<string>#include<vector>#include<malloc.h>using namespace std;typedef 阅读全文
posted @ 2012-12-22 22:33 小龙人2012 阅读(257) 评论(0) 推荐(0)
摘要: 使用gdb调试程序时,当发现问题想要修改源代码时,可以直接在用vim打开的源代码中编辑,并使用vim 的 :!g++ -g -o xxx.out xxx.cpp 命令重新生成(一定要记住需要重新编译,否则你在gdb中单步调试或者list看到的源代码已经改过来了,但是事实上并没有编译。)。然后在gdb中输入r即可重新运行,这里不需要从gdb中退出,之前设置的断点也可以继续使用。 阅读全文
posted @ 2012-12-22 22:21 小龙人2012 阅读(941) 评论(0) 推荐(0)
摘要: 解题思路:一开始想到递归,发现用递归很难保证节点的访问顺序。(递归对于先,中,后序遍历都有效,但是对于层次遍历似乎没有找到可行的方法)按照层次遍历二叉树的做法,通常用一个队列来保证节点按照先入先出的顺序来。这题的关键是如何在使用队列时确定当前所处的层次,以保证输出的每一层节点为一行。解决办法是设置两个游标cur和last,cur指向当前处理的节点,last指向当前层的最后一个节点的下一个位置。每次内循环都是输出一整层的节点,并将它们的子节点入队列。void PrintNodeByLevel(const Node *root){ vector<const Node*> vec; ve 阅读全文
posted @ 2012-12-22 19:10 小龙人2012 阅读(148) 评论(0) 推荐(0)

导航