From 878494e3b1a46df420b949eccf4faf06d37feaa0 Mon Sep 17 00:00:00 2001 From: Yu Nakamura Date: Mon, 20 Apr 2026 10:51:35 +0900 Subject: [PATCH] add files --- .../memo.md | 11 +++++ .../step1.cpp | 47 ++++++++++++++++++ .../step2.cpp | 48 +++++++++++++++++++ .../step3.cpp | 48 +++++++++++++++++++ 4 files changed, 154 insertions(+) create mode 100644 0103-binary-tree-zigzag-level-order-traversal/memo.md create mode 100644 0103-binary-tree-zigzag-level-order-traversal/step1.cpp create mode 100644 0103-binary-tree-zigzag-level-order-traversal/step2.cpp create mode 100644 0103-binary-tree-zigzag-level-order-traversal/step3.cpp diff --git a/0103-binary-tree-zigzag-level-order-traversal/memo.md b/0103-binary-tree-zigzag-level-order-traversal/memo.md new file mode 100644 index 0000000..fa0cf0c --- /dev/null +++ b/0103-binary-tree-zigzag-level-order-traversal/memo.md @@ -0,0 +1,11 @@ +### step1 + +基本は102. Binary Tree Level Order Traversalと同じで、booleanをもって階層ごとに一つ飛ばしで配列をreverseした。 + +### step2 + +変更点なし。 + +### step3 + +3回通すまで書き直し。 diff --git a/0103-binary-tree-zigzag-level-order-traversal/step1.cpp b/0103-binary-tree-zigzag-level-order-traversal/step1.cpp new file mode 100644 index 0000000..ffb8990 --- /dev/null +++ b/0103-binary-tree-zigzag-level-order-traversal/step1.cpp @@ -0,0 +1,47 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + vector> zigzagLevelOrder(TreeNode* root) { + vector> result; + if (!root) return result; + + queue nodes; + nodes.push(root); + + bool toggle = false; + while (!nodes.empty()) { + int size = nodes.size(); + vector level; + + for (int i = 0; i < size; i++) { + TreeNode* node = nodes.front(); + nodes.pop(); + + level.push_back(node->val); + + if (node->left) nodes.push(node->left); + if (node->right) nodes.push(node->right); + } + + if (toggle) { + reverse(level.begin(), level.end()); + } + + toggle = !toggle; + + result.push_back(level); + } + + return result; + } +}; diff --git a/0103-binary-tree-zigzag-level-order-traversal/step2.cpp b/0103-binary-tree-zigzag-level-order-traversal/step2.cpp new file mode 100644 index 0000000..a2665dc --- /dev/null +++ b/0103-binary-tree-zigzag-level-order-traversal/step2.cpp @@ -0,0 +1,48 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + vector> zigzagLevelOrder(TreeNode* root) { + vector> result; + if (!root) { + return result; + } + + queue nodes; + nodes.push(root); + + bool toggle = false; + while (!nodes.empty()) { + int size = nodes.size(); + vector level; + + for (int i = 0; i < size; i++) { + TreeNode* node = nodes.front(); + nodes.pop(); + + level.push_back(node->val); + if (node->left) { + nodes.push(node->left); + } + if (node->right) { + nodes.push(node->right); + } + } + if (toggle) { + reverse(level.begin(), level.end()); + } + toggle = !toggle; + result.push_back(level); + } + return result; + } +}; diff --git a/0103-binary-tree-zigzag-level-order-traversal/step3.cpp b/0103-binary-tree-zigzag-level-order-traversal/step3.cpp new file mode 100644 index 0000000..a2665dc --- /dev/null +++ b/0103-binary-tree-zigzag-level-order-traversal/step3.cpp @@ -0,0 +1,48 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + vector> zigzagLevelOrder(TreeNode* root) { + vector> result; + if (!root) { + return result; + } + + queue nodes; + nodes.push(root); + + bool toggle = false; + while (!nodes.empty()) { + int size = nodes.size(); + vector level; + + for (int i = 0; i < size; i++) { + TreeNode* node = nodes.front(); + nodes.pop(); + + level.push_back(node->val); + if (node->left) { + nodes.push(node->left); + } + if (node->right) { + nodes.push(node->right); + } + } + if (toggle) { + reverse(level.begin(), level.end()); + } + toggle = !toggle; + result.push_back(level); + } + return result; + } +};