原题链接:144. Binary Tree Preorder Traversal
【思路-Java、Python】
用 stack 实现,也许有些读者对整个过程不是很熟悉,下面就以[1,2,3,4,5,null,6]为例,执行过程如下:
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
List<Integer> res = new ArrayList<Integer>();
stack.add(root);
while(!stack.isEmpty()) {
TreeNode temp = stack.pop();
if(temp != null) {
res.add(temp.val);
stack.add(temp.right);
stack.add(temp.left);
}
}
return res;
}
}
67 / 67
test cases passed. Runtime: 2 ms Your runtime beats 1.25% of javasubmissions.
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack = []
values = []
stack.append(root)
while stack :
top_node = stack.pop()
if top_node :
values.append(top_node.val)
stack.append(top_node.right)
stack.append(top_node.left)
return values
67 / 67
test cases passed. Runtime: 59 ms Your runtime beats 4.36% of javasubmissions.
【附递归-Java、Python】
同时也补充非递归实现过程吧:
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
dfs(res, root);
return res;
}
public void dfs(List<Integer> res, TreeNode root) {
if(root == null) return;
res.add(root.val);
dfs(res, root.left);
dfs(res, root.right);
}
}
67 / 67
test cases passed. Runtime: 1 ms Your runtime beats 56.04% of javasubmissions.
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
def dfs(res,root) :
if root == None :
return []
res.append(root.val)
dfs(res,root.left)
dfs(res,root.right)
dfs(res,root)
return res
67 / 67
test cases passed. Runtime: 44 ms Your runtime beats 36.54% of javasubmissions.