一、层次遍历
如图:
通过它的遍历顺序,可以选出队列来作为辅助的存储空间最为合适
大体思路:
Queue < const BinTreeNode <Type> * > q;
template <class Type>
void LevelOrder<Type> :: advance ( ) {
if ( q.IsEmpty ( ) ) {
if ( current == NULL )
throw BadIterator(“Advance past end”);
current = NULL; return;
}
current = q.DeQueue ( ); //退队
if ( current→leftChild != NULL ) //左子女
q.EnQueue ( current→leftChild); //进队列
if ( current→rightChild != NULL ) //右子女
q.EnQueue ( current→rightchild ); //进队列
}
二、
Thread Tree(线索树)
指充分利用树中的空指针域
三、优先队列
通过小顶堆和大顶堆实现
以小顶堆为例:
是通过二叉树来实现的,既保证父节点要小于等于子节点就好
小顶堆的删除操作:
例如根节点被删出了,则将最后一个节点放上去,然后再调整为一个小顶堆
时间复杂度:最好:0 最坏:O(logn)
小顶堆的添加操作:
将添加的节点加入作为最后的一个节点,,之后再做调整。
时间复杂度:最好:0 最坏:O(logn)
四、一棵普通树变成二叉树
口诀:兄弟手拉手,向下倾斜45°
如图:
从根节点开始,他的第一个孩子作为他的左孩子,兄弟节点作为右孩子
五、树的广度遍历和深度遍历
广度遍历:层次遍历
深度遍历:先序遍历,后序遍历