Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a3507f7

Browse files
feat: add solutions to lc problem: No.0094 (doocs#2333)
No.0094.Binary Tree Inorder Traversal
1 parent 574af9d commit a3507f7

File tree

17 files changed

+616
-271
lines changed

17 files changed

+616
-271
lines changed

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/README.md‎

Lines changed: 210 additions & 91 deletions
Large diffs are not rendered by default.

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/README_EN.md‎

Lines changed: 209 additions & 90 deletions
Large diffs are not rendered by default.

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/Solution.cpp‎

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,15 @@ class Solution {
1313
public:
1414
vector<int> inorderTraversal(TreeNode* root) {
1515
vector<int> ans;
16-
while (root) {
17-
if (!root->left) {
18-
ans.push_back(root->val);
19-
root = root->right;
20-
} else {
21-
TreeNode* prev = root->left;
22-
while (prev->right && prev->right != root) {
23-
prev = prev->right;
24-
}
25-
if (!prev->right) {
26-
prev->right = root;
27-
root = root->left;
28-
} else {
29-
ans.push_back(root->val);
30-
prev->right = nullptr;
31-
root = root->right;
32-
}
16+
function<void(TreeNode*)> dfs = [&](TreeNode* root) {
17+
if (!root) {
18+
return;
3319
}
34-
}
20+
dfs(root->left);
21+
ans.push_back(root->val);
22+
dfs(root->right);
23+
};
24+
dfs(root);
3525
return ans;
3626
}
3727
};

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/Solution.go‎

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,16 @@
66
* Right *TreeNode
77
* }
88
*/
9-
func inorderTraversal(root *TreeNode) []int {
10-
var ans []int
11-
for root != nil {
12-
if root.Left == nil {
13-
ans = append(ans, root.Val)
14-
root = root.Right
15-
} else {
16-
prev := root.Left
17-
for prev.Right != nil && prev.Right != root {
18-
prev = prev.Right
19-
}
20-
if prev.Right == nil {
21-
prev.Right = root
22-
root = root.Left
23-
} else {
24-
ans = append(ans, root.Val)
25-
prev.Right = nil
26-
root = root.Right
27-
}
9+
func inorderTraversal(root *TreeNode) (ans []int) {
10+
var dfs func(*TreeNode)
11+
dfs = func(root *TreeNode) {
12+
if root == nil {
13+
return
2814
}
15+
dfs(root.Left)
16+
ans = append(ans, root.Val)
17+
dfs(root.Right)
2918
}
30-
return ans
19+
dfs(root)
20+
return
3121
}

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/Solution.java‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@
1414
* }
1515
*/
1616
class Solution {
17-
private List<Integer> ans;
17+
private List<Integer> ans = newArrayList<>();
1818

1919
public List<Integer> inorderTraversal(TreeNode root) {
20-
ans = new ArrayList<>();
2120
dfs(root);
2221
return ans;
2322
}

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/Solution.js‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
* @return {number[]}
1212
*/
1313
var inorderTraversal = function (root) {
14-
let ans = [];
15-
function dfs(root) {
16-
if (!root) return;
14+
const ans = [];
15+
const dfs = root => {
16+
if (!root) {
17+
return;
18+
}
1719
dfs(root.left);
1820
ans.push(root.val);
1921
dfs(root.right);
20-
}
22+
};
2123
dfs(root);
2224
return ans;
2325
};

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/Solution.rs‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@
1919
use std::rc::Rc;
2020
use std::cell::RefCell;
2121
impl Solution {
22-
fn dfs(root: &Option<Rc<RefCell<TreeNode>>>, res: &mut Vec<i32>) {
22+
fn dfs(root: &Option<Rc<RefCell<TreeNode>>>, ans: &mut Vec<i32>) {
2323
if root.is_none() {
2424
return;
2525
}
2626
let node = root.as_ref().unwrap().borrow();
27-
Self::dfs(&node.left, res);
28-
res.push(node.val);
29-
Self::dfs(&node.right, res);
27+
Self::dfs(&node.left, ans);
28+
ans.push(node.val);
29+
Self::dfs(&node.right, ans);
3030
}
3131

3232
pub fn inorder_traversal(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
33-
let mut res = vec![];
34-
Self::dfs(&root, &mut res);
35-
res
33+
let mut ans = vec![];
34+
Self::dfs(&root, &mut ans);
35+
ans
3636
}
3737
}

‎solution/0000-0099/0094.Binary Tree Inorder Traversal/Solution.ts‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,15 @@
1313
*/
1414

1515
function inorderTraversal(root: TreeNode | null): number[] {
16-
if (root == null) {
17-
return [];
18-
}
19-
return [...inorderTraversal(root.left), root.val, ...inorderTraversal(root.right)];
16+
const ans: number[] = [];
17+
const dfs = (root: TreeNode | null) => {
18+
if (!root) {
19+
return;
20+
}
21+
dfs(root.left);
22+
ans.push(root.val);
23+
dfs(root.right);
24+
};
25+
dfs(root);
26+
return ans;
2027
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
vector<int> inorderTraversal(TreeNode* root) {
15+
vector<int> ans;
16+
stack<TreeNode*> stk;
17+
while (root || stk.size()) {
18+
if (root) {
19+
stk.push(root);
20+
root = root->left;
21+
} else {
22+
root = stk.top();
23+
stk.pop();
24+
ans.push_back(root->val);
25+
root = root->right;
26+
}
27+
}
28+
return ans;
29+
}
30+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* type TreeNode struct {
4+
* Val int
5+
* Left *TreeNode
6+
* Right *TreeNode
7+
* }
8+
*/
9+
func inorderTraversal(root *TreeNode) (ans []int) {
10+
stk := []*TreeNode{}
11+
for root != nil || len(stk) > 0 {
12+
if root != nil {
13+
stk = append(stk, root)
14+
root = root.Left
15+
} else {
16+
root = stk[len(stk)-1]
17+
stk = stk[:len(stk)-1]
18+
ans = append(ans, root.Val)
19+
root = root.Right
20+
}
21+
}
22+
return
23+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /