首页 > 其他分享 >[LeetCode Hot 100] LeetCode94. 二叉树的中序遍历

[LeetCode Hot 100] LeetCode94. 二叉树的中序遍历

时间:2023-12-27 18:02:19浏览次数:32  
标签:node right TreeNode cur val res 中序 LeetCode94 二叉树

题目描述

思路

熟练掌握迭代和递归的代码。

  • 递归:额外写一个函数void inOrder(TreeNode node, List res)
  • 迭代:令cur = root,一直往左子树找,找到最后一个左子节点,当cur为空,就开始处理栈顶元素(将栈顶元素加入结果集),随后将cur设置为右子节点,继续执行以上操作。

方法一:递归

/**
 * 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> res = new ArrayList<>();
        inOrder(root, res);
        return res;
    }
    private void inOrder(TreeNode node, List<Integer> res) {
        if (node == null) return;
        inOrder(node.left, res);
        res.add(node.val);
        inOrder(node.right, res);
    }
}

方法二:迭代

/**
 * 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> res = new ArrayList<>();
        Deque<TreeNode> stack = new ArrayDeque<>();
        TreeNode cur = root;
        if (root == null) return res;

        while (cur != null || !stack.isEmpty()) {
            // 一直往左子树找,找到最后一个左子节点
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            // 当cur为空,就开始处理栈顶元素
            TreeNode node = stack.pop();
            res.add(node.val);
            // cur设置为当前节点的右子节点
            cur = node.right;
        }
        return res;
    }
}

标签:node,right,TreeNode,cur,val,res,中序,LeetCode94,二叉树
From: https://www.cnblogs.com/keyongkang/p/17931096.html

相关文章

  • [LeetCode Hot 100] LeetCode144. 二叉树的前序遍历
    题目描述思路熟练掌握迭代和递归的代码。递归代码:额外写一个函数voidpreOrder(TreeNodenode,Listres)迭代代码:会用到数据结构——栈。先入栈当前节点的右子节点,再入栈左子节点。方法一:递归/***Definitionforabinarytreenode.*publicclassTreeNode{*......
  • [LeetCode Hot 100] LeetCode145. 二叉树的后序遍历
    题目描述思路递归:额外写一个函数voidpostOrder(TreeNodenode,Listres)迭代:前序遍历:根---左---右将前序遍历改造成:根---右---左然后反转根右左为:左---右---根,即为后序遍历优化一下:while(!stack.isEmpty()){ TreeNodenode=stack.pop(); res.addFirst(node.......
  • 代码随想录算法训练营第十四天 | 二叉树理论基础,递归遍历,分别迭代遍历, 统一迭代遍历
    一、二叉树理论基础学习:1.从二叉树是否包含数值进行分类:无数值:完全二叉树和满二叉树有数值的:二叉搜索树和平衡二叉搜索树(AVL,Adelson-VelskyandLandis)。其中二叉搜索树指数值按照从小到大的顺序是左子树<根结点<右子树,平衡指的是左右子树高度差不超过12.二叉树存......
  • 二叉树路径总和系列问题
    二叉树路径总和系列问题作者:Grey原文地址:博客园:二叉树路径总和系列问题CSDN:二叉树路径总和系列问题LeetCode112.路径总和定义递归函数booleanprocess(TreeNodenode,intpreSum,inttarget)递归含义表示:从node节点一直到树的叶子节点,preSum表示node之前的节点......
  • 算法题:剑指 Offer 07. 重建二叉树(题目+思路+代码+注释)时空时间优先选O(N) O(N) 2ms击
    题目剑指Offer07.重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例1:Input:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]Output:[3,9,20,null,null,15,7]示例2:Input:......
  • 树与二叉树与森林
    2、若将一棵树T转化为对应的二叉树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是______。A.先序遍历B.中序遍历C.后序遍历D.按层遍历解析:在后根遍历(也称为后序遍历或后序遍历)中,对于T的每个节点,首先遍历其左子树,然后遍历其右子树,最后访问该节点本身。而在中根......
  • 二叉树 - 基本概念
    1.树的基本概念与数组链表不同,树是一种非线性的存储结构,它由n(n>=0)个节点构成并具有层次关系的存储结构把这个存储结构叫做树是因为它看上去像一颗倒挂着的树,只是根在上叶子在下它有以下特性:1. 有一个特殊的结点,称为根结点,根结点没有前驱结点2.树是由若干不相交的......
  • 完全二叉树的公共父结点
    1.有点后序遍历的思想,就是先把左子树,右子树的结果算出来,然后合并到根节点。2.合并时四种情况分类讨论.3.对于遇到要找的点就可以直接返回,不管另一个点在这个点下面还是在别的子树上,都是正确的intn,m;inta[N];intquery(introot,intx,inty){ //cerr<<root<<endl; if(r......
  • 给出中序和按层遍历,求该树的先序遍历,后序遍历,叶子结点。
    一切的核心是怎么利用中序和按层遍历构建二叉树?1.优化空间很大,可以提前预处理记录每个数对应的位置,还可以vis数组记录这个点是不是已经作为根了。2.我们考虑到每次找到当前中序要处理区间,里面的数记为集合mid,我们从前到后看层序遍历中的哪个数最先出现在mid中。那么这个数就是当......
  • 637. 二叉树的层平均值
    目录题目题解:BFS题目给定一个非空二叉树的根节点root,以数组的形式返回每一层节点的平均值。与实际答案相差10-5以内的答案可以被接受。题解:BFSclassSolution:defaverageOfLevels(self,root:Optional[TreeNode])->List[float]:q=[root]#用列表做......