From 68d5bbcb064cb452676fad8ca71108224b924c35 Mon Sep 17 00:00:00 2001 From: yuanguangxin <274841922@qq.com> Date: Mon, 3 Jan 2022 13:13:16 +0800 Subject: [PATCH] add q103 --- README.md | 1 + README_EN.md | 1 + .../Solution.java | 44 +++++++++++++++++++ .../TreeNode.java | 11 +++++ 4 files changed, 57 insertions(+) create mode 100644 src/树的遍历/q103_二叉树的锯齿形层序遍历/Solution.java create mode 100644 src/树的遍历/q103_二叉树的锯齿形层序遍历/TreeNode.java diff --git a/README.md b/README.md index 247a5cf..0d7df89 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ - [q94_二叉树的中序遍历](/src/树的遍历/q94_二叉树的中序遍历) - [q102_二叉树的层次遍历](/src/树的遍历/q102_二叉树的层次遍历) +- [q103_二叉树的锯齿形层序遍历](/src/树的遍历/q103_二叉树的锯齿形层序遍历) - [q110_平衡二叉树](/src/树的遍历/q110_平衡二叉树) - [q144_二叉树的前序遍历](/src/树的遍历/q144_二叉树的前序遍历) - [q145_二叉树的后序遍历](/src/树的遍历/q145_二叉树的后序遍历) diff --git a/README_EN.md b/README_EN.md index 21acd77..48df09d 100644 --- a/README_EN.md +++ b/README_EN.md @@ -119,6 +119,7 @@ - [Question 94 : Binary Tree Inorder Traversal](/src/树的遍历/q94_二叉树的中序遍历) - [Question 102 : Binary Tree Level Order Traversal](/src/树的遍历/q102_二叉树的层次遍历) +- [Question 103 : Binary Tree Zigzag Level Order Traversal](/src/树的遍历/q103_二叉树的锯齿形层序遍历) - [Question 110 : Balanced Binary Tree](/src/树的遍历/q110_平衡二叉树) - [Question 144 : Binary Tree Preorder Traversal](/src/树的遍历/q144_二叉树的前序遍历) - [Question 145 : Binary Tree Postorder Traversal](/src/树的遍历/q145_二叉树的后序遍历) diff --git a/src/树的遍历/q103_二叉树的锯齿形层序遍历/Solution.java b/src/树的遍历/q103_二叉树的锯齿形层序遍历/Solution.java new file mode 100644 index 0000000..dff5487 --- /dev/null +++ b/src/树的遍历/q103_二叉树的锯齿形层序遍历/Solution.java @@ -0,0 +1,44 @@ +package 树的遍历.q103_二叉树的锯齿形层序遍历; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +/** + * 和层序遍历相同,额外加一个标记控制插入队列的位置 + */ +public class Solution { + + public List> zigzagLevelOrder(TreeNode root) { + List> ans = new ArrayList<>(); + if (root == null) { + return ans; + } + Queue queue = new LinkedList<>(); + queue.add(root); + boolean flag = true; + while (!queue.isEmpty()) { + List list = new ArrayList<>(); + int size = queue.size(); + while (size > 0) { + TreeNode tn = queue.poll(); + if (flag) { + list.add(tn.val); + } else { + list.add(0, tn.val); + } + if (tn.left != null) { + queue.add(tn.left); + } + if (tn.right != null) { + queue.add(tn.right); + } + size--; + } + flag = !flag; + ans.add(list); + } + return ans; + } +} diff --git a/src/树的遍历/q103_二叉树的锯齿形层序遍历/TreeNode.java b/src/树的遍历/q103_二叉树的锯齿形层序遍历/TreeNode.java new file mode 100644 index 0000000..931d109 --- /dev/null +++ b/src/树的遍历/q103_二叉树的锯齿形层序遍历/TreeNode.java @@ -0,0 +1,11 @@ +package 树的遍历.q103_二叉树的锯齿形层序遍历; + +public class TreeNode { + int val; + TreeNode left; + TreeNode right; + + TreeNode(int x) { + val = x; + } +}