/**
* 基本思路:基本思路和树的层次遍历一致,需要改变的是如果是单层就原样插入
* 如果是双层就需要使用头插法这样得到的就是反向输出的数组。(头插法:每次插入数据时
* 插入第一个节点,例如1,2,3使用头插法就是[1],[2,1],[3,2,1])
* */
public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root == null){
return result;
}
int level = 1;
TreeNode node = null;
ArrayList<Integer> levelSort = null;
ArrayDeque<TreeNode> queue = new ArrayDeque<TreeNode>();
queue.add(root);
while(queue.size() > 0){
levelSort = new ArrayList<Integer>();
int time = queue.size();
for(int i = 0;i < time;i++){
node = queue.remove();
if(level % 2 == 0){
levelSort.add(0,node.val);
}else{
levelSort.add(node.val);
}
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
result.add(levelSort);
level++;
}
return result;
}
二叉树的之字形层序遍历给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
最新推荐文章于 2022-07-26 20:45:44 发布