输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入:
算法流程:
个人算法思想:
定义一个队列 queue
1.根节点先入队列
2.拿出队列中第一个元素寻找其左右孩子
3.如果有入队,再拿下一个,直到拿完第一个孩子入队之前的所有元素,并以此进行循环直至队列中元素为空
核心代码:
public void paintTree(){
//采用Java自带类LinkedList实现队列操作
LinkedList<Node> queue=new LinkedList<Node>();
//定义临时结点先存放根节点的值
Node temp = tree.root;
//将根节点入队列
queue.add(temp);
//定义变量level 用来记录每一层次中树叶的个数
int level = queue.size();
//当队列中某一层的树叶为零时 代表已经到达树的最底层遍历结束
while (level!= 0){
//按每一层的树叶的数量 即level的值 来遍历这些树叶
for (int i = 0; i < level; i++){
//取出队列中的一个元素
temp = queue.poll();
//输出该节点
temp.paintNode();
//如果取出的树叶元素存在左孩子
if (temp.leftChild != null){
//左孩子入队列
queue.add(temp.leftChild);
}
//如果取出的树叶元素存在右孩子
if (temp.rightChild != null){
//右孩子入队列
queue.add(temp.rightChild);
}
}//for循环结束
//在入队出队之后重新获取队列的长度
level = queue.size();
System.out.println();//用于换行
}//while循环结束
}//paintTree函数结束
每天学习一点点,未来爱你多一点