您的位置:首页 > 其它

微软算法100题16 按层遍历二叉树

2015-10-23 18:30 330 查看
第16 题:
题目(微软):
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11

思路:遇到这种按层执行或者按次序执行的动作,一般会联想到队列

package com.rui.microsoft;

import java.util.ArrayDeque;
import java.util.Deque;

public class Test16_TraverseTreeHorizontal {

public static void main(String[] args) {
Node node4 = new Node(4);
Node node3 = new Node(3);
Node node5 = new Node(5);
Node node2 = new Node(2);

node4.left = node3;
node4.right = node5;
node3.left = node2;

Test16_TraverseTreeHorizontal.traverse(node4);
}

public static void traverse(Node node){
Node head = node;

if(null == head) return;
//leaf
if(null == head.left && null == head.right){
System.out.println(head.value);
return;
}

//Non-leaf
Deque<Node> queue = new ArrayDeque<Node>();
queue.offer(head);

while(!queue.isEmpty()){
Node n = queue.poll();
System.out.println(n.value);
Node left = n.left;
Node right = n.right;
if(null != left)queue.offer(left);
if(null != right)queue.offer(right);
}

}

static class Node{
int value;
Node left;
Node right;
Node(int v){
this.value = v;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: