Skip to content

Commit 8526413

Browse files
author
kwu130
committed
feat(common,src): add preorder traversal print function and 99-recoverTree
1 parent bd2fab5 commit 8526413

2 files changed

Lines changed: 88 additions & 0 deletions

File tree

‎include/common.h‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,31 @@ inline TreeNode* build(const std::vector<int>& vec, int nullptr_val = -1) {
105105
return root;
106106
}
107107

108+
// preorder
109+
inline void print(const TreeNode* root) {
110+
if (root == nullptr) {
111+
std::cout << "null" << std::endl;
112+
return;
113+
}
114+
115+
std::queue<const TreeNode*> q;
116+
q.push(root);
117+
118+
while (!q.empty()) {
119+
const TreeNode* cur = q.front();
120+
q.pop();
121+
122+
if (cur == nullptr) {
123+
std::cout << "null ";
124+
} else {
125+
std::cout << cur->val << " ";
126+
q.push(cur->left);
127+
q.push(cur->right);
128+
}
129+
}
130+
std::cout << std::endl;
131+
}
132+
108133
inline bool equal(const TreeNode* a, const TreeNode* b) {
109134
if (a == nullptr && b == nullptr) return true;
110135
if (a == nullptr || b == nullptr) return false;

‎src/99-recoverTree.cpp‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//
2+
// Created by 1412 on 2025/11/29.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
#include "common.h"
7+
8+
using namespace std;
9+
using TreeNode = treeHelper::TreeNode;
10+
11+
class Solution {
12+
public:
13+
void recoverTree(TreeNode* root) {
14+
TreeNode *first = nullptr, *second = nullptr;
15+
inorder(root, first, second);
16+
swap(first->val, second->val);
17+
}
18+
19+
private:
20+
void inorder(TreeNode* root, TreeNode*& first, TreeNode*& second) {
21+
TreeNode* prev = nullptr;
22+
stack<TreeNode*> s;
23+
while (root != nullptr || !s.empty()) {
24+
while (root != nullptr) {
25+
s.push(root);
26+
root = root->left;
27+
}
28+
root = s.top();
29+
s.pop();
30+
if (prev != nullptr && prev->val > root->val) {
31+
second = root;
32+
if (first == nullptr) {
33+
first = prev;
34+
}
35+
}
36+
prev = root;
37+
root = root->right;
38+
}
39+
}
40+
};
41+
42+
void test() {
43+
Solution s;
44+
int nullptr_value = -1;
45+
TreeNode* root = treeHelper::build({1, 3, nullptr_value, nullptr_value, 2}, nullptr_value);
46+
TreeNode* expected = treeHelper::build({3, 1, nullptr_value, nullptr_value, 2}, nullptr_value);
47+
s.recoverTree(root);
48+
assert(treeHelper::equal(root, expected));
49+
treeHelper::free(root);
50+
treeHelper::free(expected);
51+
52+
root = treeHelper::build({3, 1, 4, nullptr_value, nullptr_value, 2}, nullptr_value);
53+
expected = treeHelper::build({2, 1, 4, nullptr_value, nullptr_value, 3}, nullptr_value);
54+
s.recoverTree(root);
55+
assert(treeHelper::equal(root, expected));
56+
treeHelper::free(root);
57+
treeHelper::free(expected);
58+
}
59+
60+
int main() {
61+
test();
62+
return 0;
63+
}

0 commit comments

Comments
 (0)