File tree 5 files changed +121
-0
lines changed
algorithms/BinaryTreeInorderTraversal
5 files changed +121
-0
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,7 @@ All solutions will be accepted!
40
40
| 1| [ Two Sum] ( https://leetcode-cn.com/problems/two-sum/description/ ) | [ java/py/js] ( ./algorithms/TwoSum ) | Easy|
41
41
| 9| [ Palindrome Number] ( https://leetcode-cn.com/problems/palindrome-number/description/ ) | [ java/py/js] ( ./algorithms/PalindromeNumber ) | Easy|
42
42
| 389| [ Find The Difference] ( https://leetcode-cn.com/problems/find-the-difference/description/ ) | [ java/py/js] ( ./algorithms/FindTheDifference ) | Easy|
43
+ | 94| [ Binary Tree Inorder Traversal] ( https://leetcode-cn.com/problems/binary-tree-inorder-traversal/description/ ) | [ java/py/js] ( ./algorithms/BinaryTreeInorderTraversal ) | Medium|
43
44
44
45
# Database
45
46
| 596| [ Big Countries] ( https://leetcode-cn.com/problems/big-countries/description/ ) | [ mysql] ( ./database/BigCountries ) | Easy|
Original file line number Diff line number Diff line change
1
+ # Binary Tree Inorder Traversal
2
+ Use recursion can easy to solve this problem, like below:
3
+ ```
4
+ # Definition for a binary tree node.
5
+ # class TreeNode(object):
6
+ # def __init__(self, x):
7
+ # self.val = x
8
+ # self.left = None
9
+ # self.right = None
10
+
11
+ class Solution(object):
12
+ def inorderTraversal(self, root):
13
+ """
14
+ :type root: TreeNode
15
+ :rtype: List[int]
16
+ """
17
+ # left -> root -> right
18
+ if not root:
19
+ return []
20
+ return self.inorderTraversal(root.left) + [ root.val ] + self.inorderTraversal(root.right)
21
+ ```
22
+ But we have to use iteration to solve this problem, the stack and the hashmap is the solution
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * public class TreeNode {
4
+ * int val;
5
+ * TreeNode left;
6
+ * TreeNode right;
7
+ * TreeNode(int x) { val = x; }
8
+ * }
9
+ */
10
+ class Solution {
11
+ public List <Integer > inorderTraversal (TreeNode root ) {
12
+ List <TreeNode > stack = new ArrayList <TreeNode >();
13
+ List <Integer > res = new ArrayList <Integer >();
14
+ Map <TreeNode , Boolean > map = new HashMap <TreeNode , Boolean >();
15
+
16
+ if (root == null ) return res ;
17
+
18
+ stack .add (root );
19
+ while (stack .size () > 0 ) {
20
+ TreeNode node = stack .get (stack .size () - 1 );
21
+ if (node .left != null && map .get (node ) == null ) {
22
+ map .put (node , true );
23
+ stack .add (node .left );
24
+ } else {
25
+ stack .remove (stack .size () - 1 );
26
+ res .add (node .val );
27
+ if (node .right != null ) {
28
+ stack .add (node .right );
29
+ }
30
+ }
31
+ }
32
+ return res ;
33
+ }
34
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * function TreeNode(val) {
4
+ * this.val = val;
5
+ * this.left = this.right = null;
6
+ * }
7
+ */
8
+ /**
9
+ * @param {TreeNode } root
10
+ * @return {number[] }
11
+ */
12
+ var inorderTraversal = function ( root ) {
13
+ if ( ! root ) {
14
+ return [ ]
15
+ }
16
+ let stack = [ root ] ,
17
+ res = [ ]
18
+
19
+ while ( stack . length > 0 ) {
20
+ let node = stack [ stack . length - 1 ]
21
+ if ( node . left && node . travered === undefined ) {
22
+ node . travered = true
23
+ stack . push ( node . left )
24
+ } else {
25
+ node = stack . pop ( )
26
+ res . push ( node . val )
27
+ if ( node . right ) {
28
+ stack . push ( node . right )
29
+ }
30
+ }
31
+ }
32
+ return res
33
+ } ;
Original file line number Diff line number Diff line change
1
+ # Definition for a binary tree node.
2
+ # class TreeNode(object):
3
+ # def __init__(self, x):
4
+ # self.val = x
5
+ # self.left = None
6
+ # self.right = None
7
+
8
+ class Solution (object ):
9
+ def inorderTraversal (self , root ):
10
+ """
11
+ :type root: TreeNode
12
+ :rtype: List[int]
13
+ """
14
+ # left -> root -> right
15
+ if not root :
16
+ return []
17
+ stack = [root ]
18
+ res = []
19
+ traverd_map = {}
20
+ while len (stack ) > 0 :
21
+ node = stack [- 1 ]
22
+ if node .left and traverd_map .get (node ) == None :
23
+ traverd_map [node ] = True
24
+ stack .append (node .left )
25
+ else :
26
+ stack .pop ()
27
+ res .append (node .val )
28
+ if node .right :
29
+ stack .append (node .right )
30
+
31
+ return res
You can’t perform that action at this time.
0 commit comments