二叉树的前中后序遍历
1.递归的三要素
- 确定递归的参数和返回值:确定哪些参数是递归过程中需要处理的,那么就在递归函数里加上整个参数。并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
- 确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统栈就会溢出。
- 确定单层递归的逻辑:确定每一次递归需要处理的信息。在这里也会重复调用自己来实现递归的过程。
2.二叉树的前序遍历
二叉树的前序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* 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;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
ArrayList<Integer> ans = new ArrayList<>();
preOld(root,ans);
return ans;
}
/**
确定方法的参数和返回值
*/
private void preOld(TreeNode root,ArrayList<Integer> ans){
//确定终止条件
if(root==null) return;
//确定单层递归的逻辑(根左右)
ans.add(root.val);
preOld(root.left,ans);
preOld(root.right,ans);
}
}
3.二叉树的后序遍历
二叉树的后序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* 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;
* }
* }
*/
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ans =new ArrayList<>();
postOrder(root,ans);
return ans;
}
private void postOrder(TreeNode root,List<Integer> ans){
if(root==null) return;
postOrder(root.left,ans);
postOrder(root.right,ans);
ans.add(root.val);
}
}
4.二叉树的中序遍历
二叉树的中序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* 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;
* }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
inOlder(root,ans);
return ans;
}
/**
确定返回值和参数,按照左根右的顺序
*/
private void inOlder(TreeNode root,List<Integer> ans){
if(root==null) return;
inOlder(root.left,ans);
ans.add(root.val);
inOlder(root.right,ans);
}
}