复试在即,刷算法笔记的过程中对何时选择二叉树的静态写法做了一些总结:
首先,不知道非静态写法该叫什么名字,姑且叫做动态写法吧。。。
1、这部分知识主要考察什么?
答:考察的是二叉树的遍历。
2、主要分哪些题型?
答:按照输入方式,大概能分两种:一种题目给的是某种遍历或某几种遍历的序列,要求求其另一种遍历序列,或稍有变化(如要求左右子树互换或套上实际背景,再或者通过求深度考察遍历);另一种则是给出每个节点的子节点,再求遍历或深度或其他(类似上面)。
3、二叉树遍历题,有哪些难点?
答:对于二叉树,要掌握的有两方面:一,根据遍历序列求二叉树;二,给出每个节点的子节点,存储二叉树。前者考察数据结构,后者难点在于存储。
4、如何解决上述两难点?
答:即选用合适的存储结构。对于根据遍历序列求二叉树的题,选用“结点链接结点”的动态存储较好,因为运算后可以返回结点类型;而如果给定的是节点编号关系,则使用静态存储较好,因为简单易行,若采用动态存储,那么就很难存储。
另:
附上两种存储的代码:
struct node{
int data;
node* lchild;
node* rchild;
};
//静态
const int maxn = 100;
struct node{
int data;//可以不要;
int lchild,rchild;
}tree[maxn];