binary-tree-level-order-traversal-ii

/**
* 给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)
* 例如:
* 给定的二叉树是{3,9,20,#,#,15,7},
* 3↵ / ↵ 9 20↵ / ↵ 15 7
* 该二叉树由底层到顶层层序遍历的结果是
* [↵ [15,7]↵ [9,20],↵ [3],↵]
*
*/

import java.lang.reflect.Array;
import java.util.ArrayList;

/**
 * 给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)
 * 例如:
 * 给定的二叉树是{3,9,20,#,#,15,7},
 *      3↵   / ↵  9  20↵    /  ↵   15   7
 * 该二叉树由底层到顶层层序遍历的结果是
 *      [↵  [15,7]↵  [9,20],↵  [3],↵]
 *
 */

public class Main50 {
    public static void main(String[] args) {
//        TreeNode root = null;
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(9);
        root.right = new TreeNode(20);
        root.right.left = new TreeNode(15);
        root.right.right = new TreeNode(7);
        System.out.println(Main50.levelOrderBottom(root));

    }

    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public static ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        ArrayList<TreeNode> array = new ArrayList<>();
        if (root == null) {
            return list;
        }
        TreeNode head = root;
        array.add(head);
        while (!array.isEmpty()) {
            ArrayList<TreeNode> newArray = new ArrayList<>();
            ArrayList<Integer> subList = new ArrayList<>();
            for (TreeNode t : array) {
                if (t.left != null) {
                    newArray.add(t.left);
                }
                if (t.right != null) {
                    newArray.add(t.right);
                }
                subList.add(t.val);
            }
            array = newArray;
            list.add(0,subList);
        }
        return list;
    }

}

  

猜你喜欢

转载自www.cnblogs.com/strive-19970713/p/11356314.html