1、定义:递归定义 树和子树
2、度:结点的度:该节点的子树个数
树的度:树中所有结点度的最大值
3、层:结点的层:根节点为第一层
树的深度或高度:树中所有结点的最大层号
4、树的存储表示:
1)列表存储表示:根节点信息在最前面,随后是该节点的子树组成的列表 eg:P190
2)左儿子右兄弟存储表示
3)2叉树存储表示:左儿子右兄弟顺时针旋转45°,任何树都可以表示成二叉树。
5、二叉树:
1)任意给定结点的度都不会超过二。
2)区分左子树和右子树。
6、树和二叉树的区别:
1)树至少要含有一个结点,二叉树可以为空。
2)可以通过子树的顺序来区分不同的二叉树,不能这样区分树。
7、两种特殊二叉树:倾斜树和完全二叉树
8、满二叉树和完全二叉树的区别
9、二叉树的存储表示:
1)数组存储表示:浪费存储空间
最差的情况:深度为k的倾斜树需要的存储空间大小为2^k-1,仅有k个被实际占用。
2)链表存储表示:方便插入和删除
10、二叉树的遍历:
1)约定遍历右子树之前先遍历左子树:
LVR,VLR,LRV,分别叫做中序遍历,先序遍历和后序遍历。
2)迭代的中序遍历
3)层序遍历
11、二叉树的其它操作:
二叉树的复制、判断二叉树相等
12、线索二叉树:
1)为了加快查找二叉树中某节点的前驱和后继的速度
2)在2n条链的二叉树中,有n+1个是空链,用它们指向二叉树中其他节点,称为线索。
3)实现思路:按某种次序遍历二叉树,在遍历过程中用线索取代空指针即可。
4)中(前、后)序遍历线索二叉树:寻找结点的前驱后继 简化。
5)向线索二叉树中插入结点。
感觉线索二叉树有点鸡肋,这些事情似乎用普通的二叉树就可以做,因为要得到线索二叉树就要先来一遍相应的搜索来得到线索,这样的话,完全可以在这一遍搜索的时候维护两个数组pre[],nxt[],维护每个结点的前驱和后继,没有的设为inf或者不会出现的值。相应的需要插入节点时也可以依照线索二叉树的方法来修改这两个数组的值。而有了这两个数组,同样可以简化该二叉树相应的搜索。
附代码:
二叉树的创建、五种遍历、复制和比较
线索树的创建和中序遍历
参考:
数据结构
线索二叉树:http://www.cnblogs.com/mcgrady/p/3320413.html