首页 > 其他分享 >力扣144 94 145 二叉树的前中后序遍历

力扣144 94 145 二叉树的前中后序遍历

时间:2023-01-04 23:23:54浏览次数:40  
标签:144 145 TreeNode val 递归 res 遍历 二叉树 root

递归三要素:
(1)确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
(2)确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
(3)确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

以前序遍历为例:
(1)确定递归函数的参数和返回值:因为要打印出前序遍历节点的数值,所以参数里需要传入vector来放节点的数值,除了这一点就不需要再处理什么数据了也不需要有返回值,所以递归函数返回类型就是void。

public void preorder(TreeNode root, List<Integer> result)
(2)确定终止条件:在递归的过程中,如何算是递归结束了呢,当然是当前遍历的节点是空了,那么本层递归就要结束了,所以如果当前遍历的这个节点是空,就直接return。
if (root == null) {
  return;
}
(3)确定单层递归的逻辑:前序遍历是中左右的循序,所以在单层递归的逻辑,是要先取中节点的数值。
result.add(root.val);
preorder(root.left, result);
preorder(root.right, result);

/**
 * 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;
 *     }
 * }
 */
题目:给你二叉树的根节点root,返回它节点值的前序遍历。
示例:
输入:root = [1,null,2,3]
输出:[1,2,3]
// 前序遍历·递归·LC144_二叉树的前序遍历:根左右
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        preorder(root,res);
        return res;
    }

    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,返回 它的中序遍历。     示例:

输入:
root = [1,null,2,3]
输出:[1,3,2]
// 中序遍历·递归·LC94_二叉树的中序遍历:左根右
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        inorder(root,res);
        return res;
    }

    public void inorder(TreeNode root,List<Integer> res){
        if(root==null){
            return;
        }
        inorder(root.left,res);//左
        res.add(root.val);//根         //注意这一句
        inorder(root.right,res);//右
    }
}

题目:给定一个二叉树的根节点root,返回它的后序遍历。
   示例:

输入:
root = [1,null,2,3]
输出:[3,2,1]
// 后序遍历·递归·LC145_二叉树的后序遍历:左右根
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        inorder(root,res);
        return res;
    }

    public void inorder(TreeNode root,List<Integer> res){
        if(root==null){
            return;
        }
        inorder(root.left,res);//左       
        inorder(root.right,res);//右
        res.add(root.val);//根  
    }
}         
 
tips:
arraylist.add(int index,E element)
注:arraylist 是 ArrayList 类的一个对象。

参数说明:
    index(可选参数)- 表示元素所插入处的索引值
    element - 要插入的元素

标签:144,145,TreeNode,val,递归,res,遍历,二叉树,root
From: https://www.cnblogs.com/cjhtxdy/p/17026190.html

相关文章

  • NC14501 大吉大利,晚上吃鸡!
    题目链接题目题目描述最近《绝地求生:大逃杀》风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏。在游戏中,皮皮和毛毛最喜欢做的事情就是堵桥,每每有一个好时......
  • 二叉树遍历
    二叉树遍历递归遍历前序voidpreOrder(BTreeroot){if(root==NULL)return;visit(root);preOrder(root->left);preOrder(root->right);......
  • 4 二叉树
      满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。完全二叉树:在完全二叉树......
  • leetcode-144-easy
    BinaryTreePreorderTraversalGiventherootofabinarytree,returnthepreordertraversalofitsnodes'values.Example1:Input:root=[1,null,2,3]Out......
  • C#遍历二叉树
    最近看了一些关于二叉树的文章,于是学习了一下C#遍历二叉树的几种方式,特记录如下二叉树,是一种数据结构,它是一种非线性的数据结构.这里的非线性是相对于线性数据结构而言......
  • 每日算法之把二叉树打印成多行
    JZ78把二叉树打印成多行题目给定一个节点数为n二叉树,要求从上到下按层打印二叉树的val值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中......
  • leetcode-637. 二叉树的层平均值
    637.二叉树的层平均值-力扣(Leetcode)层次遍历+求平均值,Go中的切片也可以模拟queue的功能/***Definitionforabinarytreenode.*typeTreeNodestruct{*......
  • BM33 二叉树的镜像
    题目描述思路分析采用递归的方法,对每一个节点做相同的处理,交换节点位置,也就类似于我们交换两个变量的值一样,需要借助一个临时变量。递归:-传递过来的节点需要做什么......
  • BM32 合并二叉树
    题目描述已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。例如:两颗二叉树是:tree1tree2合......
  • BM31 对称的二叉树
    题目描述思路分析使用递归的方法,每次传递镜像的节点进去,compare函数专门用于比对,对不同的条件做不同的处理代码参考constisSymmetrical=function(pRoot){//w......