1.递归的四个步骤
第一步:从小到大递推,
第二步:分情况讨论,明确结束条件,
第三步:组合出完整的方法,
第四步:想法验证,则从小到大画图推演,
第一步:从小到大递推,分情况讨论
//20为根节点,则此时前序访问顺序是
void visit1(){
list.add(root);//20被访问
root.left;//继续访问15
root.right;//继续访问7
}
//然后向上看node(3)的情况,
void visit2(){
list.add(root);//3被访问
root.left;//继续访问,得到9
root.right;//继续访问,得到20
}
//将其合并
void visit(){
list.add(root);
visit(root.right);
visit(root.left);
}
第二步:分情况讨论,明确结束条件
根据二叉树我们可以看出,没有左右子节点的时候停止也就是进入递归的当前访问元素为null时候,结束
第三步:组合出完整方法
将方法名用preorder表示,单词是前序的意思
public void preorder(TreeNode root, List<Integer> res){
if (root == null){
return;
}
res.add(root.val);
preorder(root.left,res);
preorder(root.right,res);
}
第四步:从大到小画图推演
画图是解题最好的方法,一道题一张图
进入递归,当root=null的时候递归结束,
直接看中序和后序代码,
//中序
public static void inOrderRecur(TreeNode root){
if (root == null){
return;
}
inOrderRecur(root.left);
System.out.println(root.val + " ");
inOrderRecur(root.right);
}
//后序
public static void postOrderRecur(TreeNode root){
if (root == null){
return;
}
inOrderRecur(root.left);
inOrderRecur(root.right);
System.out.println(root.val + " ");
}
LeetCode144中的题需要创建一个集合再传入方法,