Skip to content

Commit 926dfe1

Browse files
committed
solve problem Binary Tree Preorder Traversal
1 parent fcba73f commit 926dfe1

File tree

5 files changed

+103
-0
lines changed

5 files changed

+103
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ All solutions will be accepted!
4141
|9|[Palindrome Number](https://leetcode-cn.com/problems/palindrome-number/description/)|[java/py/js](./algorithms/PalindromeNumber)|Easy|
4242
|389|[Find The Difference](https://leetcode-cn.com/problems/find-the-difference/description/)|[java/py/js](./algorithms/FindTheDifference)|Easy|
4343
|94|[Binary Tree Inorder Traversal](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/description/)|[java/py/js](./algorithms/BinaryTreeInorderTraversal)|Medium|
44+
|144|[Binary Tree Preorder Traversal](https://leetcode-cn.com/problems/binary-tree-preorder-traversal/description/)|[java/py/js](./algorithms/BinaryTreePreorderTraversal)|Medium|
4445

4546
# Database
4647
|#|Title|Solution|Difficulty|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Binary Tree Preorder 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 preorderTraversal(self, root):
13+
"""
14+
:type root: TreeNode
15+
:rtype: List[int]
16+
"""
17+
# root -> left -> right
18+
if not root:
19+
return []
20+
return [ root.val ] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
21+
```
22+
But we have to use iteration to solve this problem, the stack is the solution
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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> preorderTraversal(TreeNode root) {
12+
List<TreeNode> stack = new ArrayList<TreeNode>();
13+
List<Integer> res = new ArrayList<Integer>();
14+
if (root == null) {
15+
return res;
16+
}
17+
18+
stack.add(root);
19+
while (stack.size() > 0) {
20+
TreeNode node = stack.get(stack.size() - 1);
21+
stack.remove(stack.size() - 1);
22+
res.add(node.val);
23+
if (node.right != null) stack.add(node.right);
24+
if (node.left != null) stack.add(node.left);
25+
}
26+
return res;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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 preorderTraversal = function(root) {
13+
if (root === null) {
14+
return []
15+
}
16+
let stack = [root],
17+
res = []
18+
while (stack.length > 0) {
19+
let node = stack.pop()
20+
res.push(node.val)
21+
if (node.right) stack.push(node.right)
22+
if (node.left) stack.push(node.left)
23+
}
24+
return res
25+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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 preorderTraversal(self, root):
10+
"""
11+
:type root: TreeNode
12+
:rtype: List[int]
13+
"""
14+
# root -> left -> right
15+
if not root:
16+
return []
17+
stack = [root]
18+
res = []
19+
while len(stack) > 0:
20+
node = stack.pop()
21+
res.append(node.val)
22+
if node.right:
23+
stack.append(node.right)
24+
if node.left:
25+
stack.append(node.left)
26+
return res
27+

0 commit comments

Comments
 (0)