给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一行要求访问的顺序是从左到右。
《编程之美》中有递归和非递归的解法。
递归解法的思路是,假设要求访问二叉树中第K层的节点,那么可以把它转换成访问以该二叉树根节点的左右节点为根的两颗左右子树的第K-1层的节点。依次递归
下面程序是输出第K层的节点
对于非递归的解法,《编程之美》上使用了一个Vector数组,然后用了两个游标来标记一层是否结束。
我自己的解法是用了两个队列。一个队列放节点,一个队列放对应的节点的层次。如果不需要每一层次输完换行的话,一个队列就够了。这种方法貌似效率要比《编程之美》上的低啊。。
扩展问题:
1. 如果要求按深度从下到上访问二叉树,每层的访问顺序仍然是从左到右,如何改进?
可以在《编程之美》的基础上改,用vector,和两个游标。。。
2. 如果按深度从下到上访问,每层的访问顺序变成从右到左,算法又该怎么改进?
对上个程序做下修改,改变左右节点进vector的顺序即可