zoukankan      html  css  js  c++  java
  • NC15 求二叉树的层序遍历

    package NC;

    import java.util.*;

    /**
    * NC15 求二叉树的层序遍历
    *
    * 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
    * 例如:
    * 给定的二叉树是{3,9,20,#,#,15,7},
    *
    * @author Tang
    * @date 2021/9/27
    */
    public class LevelOrder {

    Map<Integer, ArrayList<Integer>> tempMap = new HashMap<>();


    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
    // write code here
    postSearch(root, 0);

    ArrayList<ArrayList<Integer>> resultList = new ArrayList<>();
    for(int i = 0; i < tempMap.size(); i++) {
    ArrayList<Integer> list = tempMap.get(i);
    resultList.add(list);
    }

    return resultList;

    }

    /**
    * 后序遍历
    */
    private void postSearch(TreeNode node, int ceng) {
    if(node == null) {
    return;
    }

    postSearch(node.left, ceng+1);
    postSearch(node.right, ceng+1);


    //在特定层数的arrayList添加
    if(tempMap.get(ceng) == null) {
    ArrayList<Integer> arrayList = new ArrayList<>();
    tempMap.put(ceng, arrayList);
    }
    tempMap.get(ceng).add(node.val);

    }

    public static void main(String[] args) {

    TreeNode treeNode1 = new TreeNode(3);
    TreeNode treeNode2 = new TreeNode(9);
    TreeNode treeNode3 = new TreeNode(20);
    TreeNode treeNode4 = new TreeNode(15);
    TreeNode treeNode5 = new TreeNode(7);
    treeNode1.left = treeNode2;
    treeNode1.right = treeNode3;
    treeNode3.left = treeNode4;
    treeNode3.right = treeNode5;

    ArrayList<ArrayList<Integer>> arrayLists = new LevelOrder().levelOrder(treeNode1);




    }

    }


    class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
    this.val = val;
    }
    }
  • 相关阅读:
    齐次和线性
    数组指针/指针数组
    坐标转换矩阵
    【转】GMM与K-means聚类效果实战
    利用虚函数实现多态的方式:动态绑定
    类型限定符volatile
    《剑指offer》查找二维数组内元素 c++
    windows下使用命令行编译、链接C++源文件
    关于该博客的美化
    vimium快捷键修改
  • 原文地址:https://www.cnblogs.com/ttaall/p/15342584.html
Copyright © 2011-2022 走看看