在学习树的过程中发现,他们都有一个共同的特点,无论是在创建时还是遍历时,都是需要先父母再左孩子右孩子的顺序如图
层序遍历时顺序为A->B->C->D->E->F->G,先被访问的结点,他的孩子也是先被访问的,层序创建二叉树时,先创建的结点他的孩子也先创建,符合先进先出原则,因此可以用队列来实现。所以他们的共同点就是都可以用队列来帮助实现。
那就先从较为简单的遍历开始吧!
1.层序遍历
思路:刚才分析时我们发现可用队列,第一步,若根节点不为空我们先让根节点入队,判断他的左右孩子是否为空,若不为空打印根节点并让他的孩子入队。
第二步,取出队列中第一个结点并打印,判断他是否有左右孩子,若有让其孩子入队。
重复第二步直到队列为空。
代码:
static void levelOrder(Node t){
LinkedList<Node> q=new LinkedList();//声明队列
q.add(t);//根节点入队应该判断一下根节点是否为空,没写懒了
while(!q.isEmpty()) {
Node p = q.pollFirst();//每次都取出对头结点
System