Binary Tree Zigzag Level Order Traversal
Description
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: A Tree
* @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.
*/
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
// write your code here
Queue<TreeNode> queue = new LinkedList<TreeNode>();
//List<Integer> level = new ArrayList<Integer>();
List<List<Integer>> results = new ArrayList<>();
if(root == null){
return results ;
}
queue.offer(root);
int count = 0 ;
while(!queue.isEmpty()){
List<Integer> level = new ArrayList<Integer>();
int size = queue.size();
for(int i = 0 ; i < size ; i++){
TreeNode node = queue.poll() ;
level.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
count++ ;
if(count % 2 == 0){
Collections.reverse(level) ;
}
results.add(level);
}
return results;
}
}
该博客介绍了如何实现二叉树的锯齿形层次遍历。通过使用广度优先搜索(BFS)策略,从左到右遍历每一层,然后在偶数层反转节点顺序来达到锯齿形效果。核心代码使用了队列进行节点存储,并根据层次层数判断是否需要反转当前层节点顺序。
269

被折叠的 条评论
为什么被折叠?



