一个炎炎烈日的午后,小编正坐在一台一开机就像有千万台拖拉机呼啸而过的笔记本电脑前准备写码。
回头看了看女朋友好像要出去逛街
女朋友:好好在家复习面试。
小编:好嘞。
== 十分钟后 ==
只听门叮咣一声,感觉是女朋友出去了。此时小编默默的关掉了idea,双击了LOL,准备开一把黑
刚要输入密码,突然脖子后面感觉一股凉意袭来…。
身后传来的一阵阴森恐怖的声音。
准备开几把呀。
笔者就顺嘴回了一句,先来两把,随后就感觉不对劲
之后。XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
此时的小编想说:人和人之间连最基本的信任都没有了吗?
之后小编就在女朋友温柔的目光注释下,开始了一个一个的二叉树之旅
本篇咱们一起先聊一聊 二叉树的层序遍历
首先大家要知道,二叉树的层序遍历就是将二叉树的节点value一层一层的输出。(下图是小编自己画的二叉树,虽丑,但有灵魂)它的层序遍历结果是:[[35],[19,49],[15,23,51],[53]]
- 首先我们想,既然是一层一层的遍历,那么我们就可以先将第一层的节点放入一个List(下称levelList)中。
- 然后取出这个levelList中的所有节点,这就是第一层的节点,然后依次判断levelList中的所有节点的左右子节点是否为空,不为空的话,就将其插入到一个临时list中,然后清空levelList,将临时list中的节点add到levelList中,以此类推。
之后就是真正的技术了
- 首先最基础的先构建一个二叉树类
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
- 之后就是进行层序遍历
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null){
return new ArrayList<List<Integer>>();
}
List<List<Integer>> result = new ArrayList<List<Integer>>(); //最终结果
List<TreeNode> level = new ArrayList<TreeNode>(); //每一层的节点
level.add(root);
while (level != null && !level.isEmpty()) {//如果下一层有值的情况下才进行遍历
Iterator<TreeNode> iterator = level.iterator();
List<Integer> levelVal = new ArrayList<Integer>();//每一层节点的值
List<TreeNode> levelTemp = new ArrayList<TreeNode>();//用于临时存放下一层的节点,在删除level之后,统一add进level
while (iterator.hasNext()){
TreeNode tempTreeNode = iterator.next();
levelVal.add(tempTreeNode.val);
iterator.remove();
if(tempTreeNode.left != null){
levelTemp.add(tempTreeNode.left);
}
if(tempTreeNode.right != null){
levelTemp.add(tempTreeNode.right);
}
}
result.add(levelVal);
level.addAll(levelTemp);
}
return result;
}
- 运行的结果,原二叉树就不给大家
[[35],[19,49],[15,23,51],[53]]
今天就到这了,小编要陪女朋友一起出去逛街了——!——