关键之处在于理解树的在遍历过程中的路线图,从根节点到左子树,再回到根节点,从根节点到右子树,再回到根节点,3次访问根节点,打印的时间点决定了前序、中序和后序。
层次遍历利用队列的数据结构,通过根节点放入队列,利用循环在循环体中打印节点并分别将左右儿子加入队列,从而实现层次级别的访问。打印叶节点利用了递归和非递归两种方法,判断条件即左右儿子是否同时为空,为空即为叶节点并打印出来。计算树的深度需要利用递归,根据左右子树的高度最大值加一得到树的高度。删除树节点是比较麻烦的事情,主要考虑3种情况:叶节点的删除(直接将其父节点指向它的指针置为空,并释放该内存空间),只有一个儿子的节点删除(将儿子节点指针直接赋值给其父节点以代替其位置,并释放该节点地址),有两个儿子的节点删除(从右子树中寻找最小值节点,将其数据赋值给该节点,并删除最小值节点,表面上看删除了节点,实际上只是改变了数值,连接关系不变,简化了计算)。在以上过程中需要查询父节点函数,通过非递归遍历返回父节点,这里就反映出父节点指针的必要性了。寻找子树的最小值节点就是直接循环往左儿子节点找,直到某节点左儿子为空,该节点就是最小值节点。