aboutsummaryrefslogtreecommitdiff
path: root/reverse_odd_levels_bt.c
diff options
context:
space:
mode:
Diffstat (limited to 'reverse_odd_levels_bt.c')
-rw-r--r--reverse_odd_levels_bt.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/reverse_odd_levels_bt.c b/reverse_odd_levels_bt.c
new file mode 100644
index 0000000..834bca5
--- /dev/null
+++ b/reverse_odd_levels_bt.c
@@ -0,0 +1,41 @@
+// 2415. Reverse Odd Levels of Binary Tree
+#include "leetcode.h"
+
+/*
+ * given the 'root' of a perfect binary tree, reverse the node values at each
+ * odd level of the tree. return the root of the reversed tree. a binary tree is
+ * perfect if all parent nodes have two children and all leaves are on the same
+ * level. the level of a node is the number of edges along the path between it
+ * and the root node.
+ */
+
+void dfs(struct TreeNode *node1, struct TreeNode *node2, int level) {
+ if (!node1 || !node2)
+ return;
+ if (!(level % 2)) {
+ int tmp = node1->val;
+ node1->val = node2->val;
+ node2->val = tmp;
+ }
+ dfs(node1->left, node2->right, level + 1);
+ dfs(node1->right, node2->left, level + 1);
+}
+
+struct TreeNode *reverseOddLevels(struct TreeNode *root) {
+ dfs(root->left, root->right, 0);
+ return root;
+}
+
+int main() {
+ struct TreeNode *root = treenode_create(2);
+ root->left = treenode_create(3);
+ root->right = treenode_create(5);
+ root->left->left = treenode_create(8);
+ root->left->right = treenode_create(13);
+ root->right->left = treenode_create(21);
+ root->right->right = treenode_create(34);
+ struct TreeNode *rol = reverseOddLevels(root);
+ treenode_print(rol);
+ treenode_free(root);
+ treenode_free(rol);
+}