【基础算法】二叉树按层遍历并打印输出

思想:

last:表示正在打印的当前行的最右节点;

nlast:表示下一行最右节点;

从左到右宽度优先遍历,到last表示该换行了,换行之后,令last=nlast,循环;

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

public class BinTreePrint {
	private static class binaryTreeNode{
		private int val;
		private binaryTreeNode left;
		private binaryTreeNode right;
		
		public binaryTreeNode() {}
		public binaryTreeNode(int val) {
			this.val = val;
		}
	}
	
	public static void binaryNodePrint(binaryTreeNode root) {
		Queue<binaryTreeNode> queue = new LinkedList<>();
		binaryTreeNode last = root;
		binaryTreeNode nlast = root;
		queue.offer(root);
		
		while (!queue.isEmpty()) {
			binaryTreeNode node = queue.poll();
			System.out.print(node.val);
			System.out.print('\t');
			if (node.left != null) {
				queue.offer(node.left);
				nlast = node.left;
			}
			if (node.right != null) {
				queue.offer(node.right);
				nlast = node.right;
			}
			if (node == last) {
				System.out.println();
				last = nlast;
			}
		}
	}
	
	public static void main(String[] args) {
		binaryTreeNode n1 = new binaryTreeNode(1);
		binaryTreeNode n2 = new binaryTreeNode(2);
		binaryTreeNode n3 = new binaryTreeNode(3);
		binaryTreeNode n4 = new binaryTreeNode(4);
		binaryTreeNode n5 = new binaryTreeNode(5);
		binaryTreeNode n6 = new binaryTreeNode(6);
		binaryTreeNode n7 = new binaryTreeNode(7);
		binaryTreeNode n8 = new binaryTreeNode(8);
		
		n1.left = n2;
		n1.right = n3;
		n2.left = n4;
		n3.left = n5;
		n3.right = n6;
		n5.left = n7;
		n5.right = n8;
		
		binaryNodePrint(n1);
		
	}

}



猜你喜欢

转载自blog.csdn.net/huiyudaoyi/article/details/80515914
今日推荐