首页 > 其他分享 >LeetCode 94. 二叉树的中序遍历

LeetCode 94. 二叉树的中序遍历

时间:2023-05-15 16:24:34浏览次数:60  
标签:遍历 TreeNode int res 中序 stk 二叉树 root LeetCode

题目链接:LeetCode 94. 二叉树的中序遍历

题意:

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

解题思路:

对于二叉树的遍历,有递归和非递归两种遍历方式,
1. 递归遍历
** 根据“左->根->右”的顺序,直接模拟即可。注意按照递归三部曲(递归的参数和返回值、递归的终止条件、单层递归的逻辑)**

递归代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 var res []int
func inorderTraversal(root *TreeNode) []int {
res = []int{}
    pt(root)
    return res
}

func pt(root *TreeNode){
    if root == nil{
        return
    } 
    pt(root.Left)
    
    res = append(res,root.Val)
    pt(root.Right)
   
}

2. 迭代遍历

迭代代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var res []int
func inorderTraversal(root *TreeNode) []int {
    var res []int //结果数组
    var stk []*TreeNode  //栈
    for root != nil || len(stk)!= 0{ //当节点不空或者栈不空时
        for root != nil { //如果当前节点不空,入栈
            stk = append(stk,root) 
            root = root.Left  //当前节点移动到他的左子树上(遍历左子树)
        }
        // 循环结束后,root 指向的是最左最下节点的左孩子,即 nil节点
        root = stk[len(stk)-1]  //取出栈顶元素
        stk = stk[:len(stk)-1]  //出栈
        res = append(res,root.Val) //当前节点加入结果集 (遍历当前节点)
        root = root.Right  //遍历右子树
    }
    return res
}

标签:遍历,TreeNode,int,res,中序,stk,二叉树,root,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17402233.html

相关文章

  • 二刷Leetcode-Days02
    栈和队列:/***232.用栈实现队列*队列的先进先出可以使用两个栈stackIn和stackOut来实现;*出队列前,如果stackOut不为空,表示队列当前值在上一轮已进入stackOut中,还没有被消费掉*若stackOut为空,也就是队列当前值还在stackIn中,为了确保先进先......
  • 2023-05-15 leetcode周赛题
    找出转圈游戏输家mysolution100%passclassSolution:defcircularGameLosers(self,n:int,k:int)->List[int]:seen=set()now_num=1step=1seen.add(1)while1:stepSum=step*ktotal=now_num+stepSumnow_num=tot......
  • 第五章 5.3.6找出二叉树中的前驱和后继结点
    中序线索二叉树找中序后继中序线索二叉树找中序前驱先序线索二叉树找先序后继先序线索二叉树找找先序前驱无法直接找到先序前驱,需要引入父节点指针(三叉链表),后序线索二叉树找后序前驱后序线索二叉树找后序后继找不到后序后继,需要通过三叉链表总结......
  • 【LeetCode字符串#extra】KMP巩固练习:旋转字符串、字符串轮转
    旋转字符串https://leetcode.cn/problems/rotate-string/给定两个字符串,s和goal。如果在若干次旋转操作之后,s能变成goal,那么返回true。s的旋转操作就是将s最左边的字符移动到最右边。例如,若s='abcde',在旋转一次之后结果就是'bcdea'。示例1:输入:s="......
  • leetcode1004
    1.二分查找法用一数组P【i】记录每个位置之前到自己本身位置i有多少个0,只要满足【下界,上界】之间的0个数小于等于k就可以连接成为连续的1。即P【上界】-P【下界】<=k因为第一个位置要是为0要做特殊处理[上界,下界]之间0的个数不能简单用P[上界]-P【下界】,记有n个元素,从P[0]~P......
  • LeetCode 347. 前 K 个高频元素
    题目链接:LeetCode347.前K个高频元素题意:给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。解题思路:(哈希表,计数排序)O(n)首先用哈希表统计出所有数出现的次数。由于所有数出现的次数都在1到n之间,所以我们可以......
  • 代码随想录day4|leetcode24,19,142
    Leetcode24我一开始是直接模拟,通过考虑后面有没有secondpoint和thirdpoint的情况下进行的编程,非常的冗长。后面阅读了推荐的答案,发现在编写链表题目的时候,可以使用虚拟头节点,这样写出来的结果非常的简洁明了,并且一二两个就可以开始重复进行 关于判断语句的如果是and连接......
  • LeetCode 239. 滑动窗口最大值
    题目链接:LeetCode239.滑动窗口最大值题意:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。解题思路:(单调队列)O(n)使用单调队列求解......
  • LeetCode 150. 逆波兰表达式求值
    题目链接:LeetCode150.逆波兰表达式求值题意:给你一个字符串数组tokens,表示一个根据逆波兰表示法表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。解题思路:(栈操作)O(n)遍历所有元素。如果当前元素是整数,则压入栈;如果是运算符,则将栈顶两个元素弹出......
  • LeetCode 1047. 删除字符串中的所有相邻重复项
    题目链接:LeetCode1047.删除字符串中的所有相邻重复项题意:给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。解题思路:开一个栈,然后扫描整个字符串。如果当前字符和栈顶元素不相等,则当前......