- 算法
回溯法、深度优先搜索 - 核心思想
三者在代码上的区别就是在哪里保存根的值。 - 代码
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new LinkedList<>();
if(root == null) return res;
dfs(root,res);
return res;
}
void dfs(TreeNode node,List<Integer> res){
res.add(node.val);
if(node.left == null && node.right == null){
return;
}
if(node.left != null){
TreeNode tempNode = node.left;
dfs(tempNode,res);
}
if(node.right != null){
TreeNode tempNode = node.right;
dfs(tempNode,res);
}
}
}
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new LinkedList<>();
if(root == null) return res;
dfs(root,res);
return res;
}
void dfs(TreeNode node,List<Integer> res){
if(node.left == null && node.right == null){
res.add(node.val);
return;
}
if(node.left != null){
TreeNode tempNode = node.left;
dfs(tempNode,res);
}
res.add(node.val);
if(node.right != null){
TreeNode tempNode = node.right;
dfs(tempNode,res);
}
}
}
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new LinkedList<>();
if(root == null) return res;
dfs(root,res);
return res;
}
void dfs(TreeNode node,List<Integer> res){
if(node.left == null && node.right == null){
res.add(node.val);
return;
}
if(node.left != null){
TreeNode tempNode = node.left;
dfs(tempNode,res);
}
if(node.right != null){
TreeNode tempNode = node.right;
dfs(tempNode,res);
}
res.add(node.val);
}
}