Skip to content

Commit 0f3ca10

Browse files
author
dai
committed
zigzag print
1 parent 9249286 commit 0f3ca10

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

26-算法面试专题-二叉树.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,52 @@ public class TreeSolvingUtil {
561561
System.out.println();
562562
}
563563

564+
565+
/**
566+
* 6、二叉树,zigzag打印
567+
*
568+
* @param root 根节点
569+
* @return
570+
*/
571+
572+
public static List<List<Integer>> zigzagLevelOrder(TreeNode root) {
573+
List<List<Integer>> ans = new ArrayList<>();
574+
if (root == null) {
575+
return ans;
576+
}
577+
LinkedList<TreeNode> deque = new LinkedList<>();
578+
deque.add(root);
579+
int size = 0;
580+
// 开关每次切换,打印顺序每次变化
581+
boolean isHead = true;
582+
while (!deque.isEmpty()) {
583+
size = deque.size();
584+
List<Integer> curLevel = new ArrayList<>();
585+
for (int i = 0; i < size; i++) {
586+
TreeNode cur = isHead ? deque.pollFirst() : deque.pollLast();
587+
curLevel.add(cur.val);
588+
if(isHead) {
589+
if (cur.left != null) {
590+
deque.addLast(cur.left);
591+
}
592+
if (cur.right != null) {
593+
deque.addLast(cur.right);
594+
}
595+
}else {
596+
if (cur.right != null) {
597+
deque.addFirst(cur.right);
598+
}
599+
if (cur.left != null) {
600+
deque.addFirst(cur.left);
601+
}
602+
}
603+
}
604+
ans.add(curLevel);
605+
isHead = !isHead;
606+
}
607+
return ans;
608+
}
609+
564610
/**
565611
* 7、二叉树,给定量给节点,求这两个节点的最近公共祖先
566612
*

0 commit comments

Comments
 (0)