题目
二叉树的定义:
public class {
int val;
TreeNode left;
TreeNode right;
TreeNode () {};
TreeNode (int val){
this.val = val;
}
TreeNode(int val,TreeNode left,TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
递归三要素:
- 确定递归函数的参数和返回值
- 确定终止条件
- 确定单层递归的逻辑
java代码:
//前序遍历
class Solution {
public List<Integer> preorderTraversal(TreeNode root){
List<Integer> result = new ArrayList<Integer>();
preorder(root,result);
return result;
}
void preorder(TreeNode root,List<Integer> result){
if(root == null){
return;
}
result.add(root.val);//中左右
preorder(root.left,result);
preorder(root.right,result);
}
}
//中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root){
List<Integer> res = new ArrayList<>();
inorder(root,res);
return res;
}
void inorder(TreeNode root,List<Integer> result){
if(root == null) return;
inorder(root.left,result);//左中右
result.add(root.val);
inorder(root.right,result);
}
}
//后序遍历
class Solution {
public List<Integer> postorderTraversal(TreeNode root){
List<Integer> res = new ArrayList<>();
postorder(root,res);
return res;
}
void postorder(TreeNode root,List<Integer> result){
if(root == null) return;
postorder(root.left,result);//左右中
postorder(root.right,result);
result.add(root.val);
}
}