剑指offerNo22. 从上往下打印二叉树(Java)

题目描述:

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路:可借助队列对树进行层次遍历。可先将树的根节点加入队列,当根节点元素出队列的时候,将根节点的左右子树加入队列,当左子树出队列时,将左子树的左右节点加入队列,...依次进行。

代码:

package offer;

import sun.reflect.generics.tree.Tree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class TestNo22 {
    static class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x){
            val = x;
        }
    }
    public static void main(String[] args) {
        TreeNode root =new TreeNode(0);
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(5);
        root.left = node1;
        root.right = node2;
        node1.left = node3;
        System.out.println(new TestNo22().PrintFromTopToBottom(root));

    }
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(root == null){
            return list;
        }
        //初始化队列
        Queue<TreeNode> q = new LinkedList();
        q.add(root);
        //处理当前的节点
        TreeNode curNode;
        while (!q.isEmpty()){
            curNode = q.poll();
            list.add(curNode.val);
            //当前节点的左子树进入队列
            if(curNode.left!=null){
                q.offer(curNode.left);
            }
            //当前节点的右子树进入队伍
            if(curNode.right != null){
                q.offer(curNode.right);
            }
        }
        return list;
    }
}
发布了64 篇原创文章 · 获赞 13 · 访问量 4295

猜你喜欢

转载自blog.csdn.net/qq_40664693/article/details/104375948