diff --git a/README.md b/README.md index 084828e..aced119 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 70. Climbing Stairs | [Link](https://leetcode.com/problems/climbing-stairs/) | [Link](./lib/easy/climbing_stairs.dart) | | 83. Remove Duplicates from Sorted List | [Link](https://leetcode.com/problems/remove-duplicates-from-sorted-list/) | [Link](./lib/easy/remove_duplicates_from_sorted_list.dart) | | 88. Merge Sorted Array | [Link](https://leetcode.com/problems/merge-sorted-array/) | [Link](./lib/easy/merge_sorted_array.dart) | +| 94. Binary Tree Inorder Traversal | [Link](https://leetcode.com/problems/binary-tree-inorder-traversal/) | [Link](./lib/easy/binary_tree_inorder_traversal.dart) | diff --git a/lib/common/tree_node.dart b/lib/common/tree_node.dart new file mode 100644 index 0000000..174466e --- /dev/null +++ b/lib/common/tree_node.dart @@ -0,0 +1,11 @@ +class TreeNode { + int val; + TreeNode? left; + TreeNode? right; + + TreeNode([ + this.val = 0, + this.left, + this.right, + ]); +} diff --git a/lib/easy/binary_tree_inorder_traversal.dart b/lib/easy/binary_tree_inorder_traversal.dart new file mode 100644 index 0000000..ea64576 --- /dev/null +++ b/lib/easy/binary_tree_inorder_traversal.dart @@ -0,0 +1,18 @@ +// https://leetcode.com/problems/binary-tree-inorder-traversal/ +import '../common/tree_node.dart'; + +class Solution { + List inorderTraversal(TreeNode? root) { + final values = []; + _apply(root, values); + return values; + } + + void _apply(TreeNode? node, List values) { + if (node != null) { + _apply(node.left, values); + values.add(node.val); + _apply(node.right, values); + } + } +} diff --git a/test/common/binary_tree_helper.dart b/test/common/binary_tree_helper.dart new file mode 100644 index 0000000..601c438 --- /dev/null +++ b/test/common/binary_tree_helper.dart @@ -0,0 +1,15 @@ +import 'package:leetcode_dart/common/tree_node.dart'; + +class LinkedListHelper { + LinkedListHelper._(); + + static bool areEqual(TreeNode? f, TreeNode? s) { + while (f != null && s != null) { + if (f.val != s.val) { + return false; + } + return areEqual(f.left, s.left) && areEqual(f.right, s.right); + } + return f == null && s == null; + } +} diff --git a/test/easy/binary_tree_inorder_traversal_test.dart b/test/easy/binary_tree_inorder_traversal_test.dart new file mode 100644 index 0000000..9ee4af4 --- /dev/null +++ b/test/easy/binary_tree_inorder_traversal_test.dart @@ -0,0 +1,30 @@ +import 'package:leetcode_dart/common/tree_node.dart'; +import 'package:leetcode_dart/easy/binary_tree_inorder_traversal.dart'; +import 'package:test/test.dart'; + +void main() { + group( + 'Example tests', + () { + final btit = Solution(); + test( + '[1, 3, 2]', + () => expect( + [1, 3, 2], + btit.inorderTraversal( + TreeNode( + 1, + null, + TreeNode( + 2, + TreeNode(3), + ), + ), + ), + ), + ); + test('[]', () => expect([], btit.inorderTraversal(null))); + test('[1]', () => expect([1], btit.inorderTraversal(TreeNode(1)))); + }, + ); +}