辛星Java树算法教程第十一篇:二叉树从下向上按层遍历

正常的分层遍历是从上向下,每一层从左到右。
我们这里的分层是自下向上,每一层仍然从左到右。
比如一棵树是这样的:

      A
   B     C 
D   E      F

那么从上到下,从左到右的输出就是:ABCDEF。
那么从下到上,从左到右的输出就是:DEFBCA。

其实这里的实现也比较简单,我们需要借助一个队列和一个栈,队列用来实现分层遍历,但是入队的时候我们是先入队右子树,然后入队左子树。
我们把所有的数据都存入栈中,当我们从栈中弹出数据的时候,我们的输出就是从下到上,从左到右的了。
我们来直接给出一个示例代码吧:

package com.mengzhidu.teach.algorithm.tree.demo.traversal;

import com.mengzhidu.teach.algorithm.tree.demo.TreeNode;
import com.mengzhidu.teach.algorithm.tree.demo.TreeNodeHelper;

import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Stack;

/**
 * 从底向上的按层进行遍历
 */
public class BottomUpLevelOrderTraversalDemo {
     

    public static void main(String[] args) {
     
        Stack<TreeNode> stack = new Stack<>();
        TreeNode root = TreeNodeHelper.getTreeNode();
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.add(root);

        while (!queue.isEmpty()) {
     
            TreeNode tmp = queue.poll();
            stack.add(tmp);
            if (tmp.getRight() != null) {
     
                queue.add(tmp.getRight());
            }
            if (tmp.getLeft() != null) {
     
                queue.add(tmp.getLeft());
            }
        }

        while (!stack.isEmpty()) {
     
            System.out.println(stack.pop().getValue());
        }

    }
}

你可能感兴趣的:(算法,辛星,Java树算法,树的倒序分层遍历,教程)