美文网首页
二叉树按层遍历

二叉树按层遍历

作者: zsdvvb | 来源:发表于2018-03-04 21:38 被阅读0次

二叉树按层遍历,利用队列,和last与nlast两个变量实现,last为本层中的最后一个节点,nlast为下一层的最后一个节点,每次从队列中出队元素,加入当前层的集合中,然后先将它的左子树入队(不为空的话),将nlast指向它,再将它的右子树入队(不为空的话),将nlast指向它,最后如果last跟它指向同一个节点,表示当前层已经到最后一个元素了,令last = nlast,将当前层集合加入结果集合中,建立新的层集合,如此循环,直到queue为空:

import java.util.ArrayDeque;
import java.util.ArrayList;

public class PrintBinaryTree {

    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(3);
        TreeNode node2 = new TreeNode(4);
        TreeNode node3 = new TreeNode(5);
        TreeNode node4 = new TreeNode(6);
        TreeNode node5 = new TreeNode(7);
        TreeNode node6 = new TreeNode(8);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node3.left = node5;
        node3.right = node6;
        int[][] res = printTree(node1);
        for(int i = 0; i < res.length; i++) {
            for(int j = 0; j < res[i].length; j++) {
                System.out.print(res[i][j] + " ");
            }
            System.out.println();
        }
        
    }

    

    public static int[][] printTree(TreeNode root) {
        ArrayDeque<TreeNode> aq = new ArrayDeque<>();
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        ArrayList<Integer> index = new ArrayList<>();
        TreeNode last = null;
        TreeNode nlast = null;
        TreeNode temp;
        if(root == null)
            return null;
        else {
            last = root;
            aq.addLast(root);
        }
            
        while(aq.size() != 0) {

            temp = aq.removeFirst();
            index.add(temp.val);
            if(temp.left != null) {
                aq.addLast(temp.left);
                nlast = temp.left;
            }
            if(temp.right != null) {
                aq.addLast(temp.right);
                nlast = temp.right;
            }
            if(temp == last) {
                res.add(index);
                index = new ArrayList<>();
                last = nlast;
            }

            
        }

        int result[][] = new int[res.size()][];
        for(int i = 0; i < res.size(); i++) {
            result[i] = new int[res.get(i).size()];
            for(int j = 0; j < result[i].length; j++) {
                result[i][j] = res.get(i).get(j);
            }
        }
        return result;
    }
}

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}

结果

3 
4 5 
6 7 8 

相关文章

  • ALI 算法

    二叉树遍历算法: 按层遍历, 中序前序后序:

  • leecode刷题(25)-- 二叉树的层序遍历

    leecode刷题(25)-- 二叉树的层序遍历 二叉树的层序遍历 给定一个二叉树,返回其按层次遍历的节点值。 (...

  • 3.有关二叉树的算法

    1.分层遍历二叉树:宽度优先遍历 2.分层遍历应用,按层打印二叉树 3.前序遍历二叉树 4.前序遍历,迭代 5.中...

  • Leetcode 102 二叉树的层序遍历

    二叉树的层序遍历 题目 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)...

  • 102.二叉树的层序遍历

    二叉树的层序遍历 题目 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)...

  • LeetCode 102. 二叉树的层序遍历 Binary Tr

    102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节...

  • 二叉树--按层遍历

    今天练习的算法是按层遍历一个二叉树。 题目介绍 我们还是用这张老的二叉树来举例子吧: 按层遍历的意思是从树的跟节点...

  • 二叉树遍历

    二叉树的遍历大概分为四种: 前序遍历,中序遍历,后序遍历,按层遍历。 1.前序遍历: 原则:根->左->右 2.中...

  • 力扣 297 二叉树的序列化与反序列化

    题意:序列化和反序列化一个二叉树 思路:按层遍历 思想:树的按层遍历 复杂度:时间O(n),空间O(n)

  • 二叉树遍历

    二叉树的遍历,分为深度优先遍历和广度优先遍历,其中深度优先遍历又分为有前序、中序、后序遍历,广度优先遍历就是按层遍...

网友评论

      本文标题:二叉树按层遍历

      本文链接:https://www.haomeiwen.com/subject/eniqfftx.html