算法题 打印从左方向看到的二叉树

头条面试官问的一个问题,当时居然没写出来,难受。(树和队列练得少)

题目描述:打印从左往右看到的二叉树(就是打印每层第一个节点)

思路:按层换行打印改动一下,加个标记位解决。

          按层换行打印:https://blog.csdn.net/qq_35546040/article/details/80389381

代码:

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

public class Tree {
    TreeNode last;
    TreeNode nlast;
    public void printTree(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        last = root;	//记录当前层最后一个节点
        nlast = root;	//记录下一层的最后一个节点
        int flag = 1;
        while (!queue.isEmpty()) {
            TreeNode t = queue.peek();
            if(flag == 1){
            	System.out.print(queue.poll().val + " ");
            	flag = 0;
            }else{
            	queue.poll();
            }
            	
            if (t.left != null) {
                queue.offer(t.left);
                nlast = t.left;
            }
            if (t.right != null) {
                queue.offer(t.right);
                nlast = t.right;
            }
            // 如果当前输出结点是最右结点,那么换行
            if (last == t) {
                flag = 1;
                last = nlast;
            }
        }
    }

    public static void main(String[] args) {
        // 构建二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.right.left = new TreeNode(5);
        root.right.right = new TreeNode(6);
        root.right.left.left = new TreeNode(7);
        root.right.left.right = new TreeNode(8);
        Tree test = new Tree();
        test.printTree(root);
    }
}

TreeNode 定义:

public class TreeNode {
	public int val;
	public TreeNode left;
	public TreeNode right;
	public TreeNode(int data,TreeNode left,TreeNode right){
		this.val = data;
		this.left = left;
		this.right = right;
	}
	public TreeNode(int val){
		this.val = val;
	}
}

树长这样:

《算法题 打印从左方向看到的二叉树》

打印结果:

 

《算法题 打印从左方向看到的二叉树》

    原文作者:hf : )
    原文地址: https://blog.csdn.net/qq_35546040/article/details/80389733
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞