[GeeksForGeeks] Level order traversal in spiral form of a binary tree.

Posted Push your limit!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GeeksForGeeks] Level order traversal in spiral form of a binary tree.相关的知识,希望对你有一定的参考价值。

Write a function to print spiral order traversal of a binary tree. For below tree, function should print 1, 2, 3, 4, 5, 6, 7.


 技术分享 

 


Solution.

For a normal level order traversal of a binary tree, we traverse every level from left to right. To achieve this, a queue 

is used to store the next level‘s nodes. 

To do this traversal in a spiral order, we need to be able to add and poll nodes in a queue from its front and back.

This implies using Deque and a boolean flag to indicate if we are traversing from left to right or from right to left.

When traversing from right to left, we poll nodes from the end of dq; First add its right child node, then its left child node to the front of dq.

When traversing from left to right, we poll nodes from the front of dq; First add its left, then right child node to the back of dq.

After adding all nodes in one level, reverse the traversal direction flag.

 

 1 import java.util.ArrayList;
 2 import java.util.LinkedList;
 3 import java.util.Deque;
 4 
 5 class LOTSpiralNode {
 6     int val;
 7     LOTSpiralNode left, right;
 8     LOTSpiralNode(int v) {
 9         this.val = v;
10         this.left = null;
11         this.right = null;
12     }
13     LOTSpiralNode(LOTSpiralNode t){
14         this.val = t.val;
15         this.left = t.left;
16         this.right = t.right;
17     }
18 }
19 public class LOTSpiral {
20     public ArrayList<Integer> levelOrderTraversalSpiral(LOTSpiralNode root) {
21         ArrayList<Integer> list = new ArrayList<Integer>();
22         if(root == null) {
23             return list;
24         }
25         Deque<LOTSpiralNode> dq = new LinkedList<LOTSpiralNode>();
26         boolean leftToRight = false;
27         dq.add(root);
28         while(!dq.isEmpty()) {
29             int size = dq.size();
30             for(int i = 0; i < size; i++) {
31                 LOTSpiralNode curr;
32                 if(leftToRight) {
33                     curr = dq.pollFirst();
34                     if(curr.left != null) {
35                         dq.addLast(curr.left);
36                     }
37                     if(curr.right != null) {
38                         dq.addLast(curr.right);
39                     }
40                 }
41                 else{
42                     curr = dq.pollLast();
43                     if(curr.right != null) {
44                         dq.addFirst(curr.right);
45                     }
46                     if(curr.left != null) {
47                         dq.addFirst(curr.left);
48                     }
49                 }
50                 list.add(curr.val);
51             }
52             leftToRight = !leftToRight;
53         }
54         return list;
55     }
56 }

 





以上是关于[GeeksForGeeks] Level order traversal in spiral form of a binary tree.的主要内容,如果未能解决你的问题,请参考以下文章

[GeeksForGeeks] Print leftmost and rightmost nodes at each level of a binary tree.

为啥这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现分段错误?

GeeksForGeeks 翻译计划

geeksforgeeks@ Equal to product (Binary Search)

geeksforgeeks@ Maximum Index (Dynamic Programming)

c_cpp 键盘打字 - GeeksforGeeks