首页 > 其他分享 >LeetCode 226. 翻转二叉树

LeetCode 226. 翻转二叉树

时间:2023-05-15 18:24:14浏览次数:47  
标签:Right TreeNode stk 二叉树 226 root LeetCode Left

题目链接:LeetCode 226. 翻转二叉树

题意:

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

解题思路:

对于每一个节点,只需要考虑反转当前节点的左右子树即可,因此只需要考虑遍历顺序,本题中,采用前序和后序遍历都是可以的,但是中序遍历不行,
如果采用中序,会将某些节点反转两次,导致出错。下面以前序遍历的顺序为例

递归代码如下:

func invertTree(root *TreeNode) *TreeNode {
    dfs(root)
    return root
}
func dfs(root *TreeNode){
    if root == nil{
        return
    }
    root.Left,root.Right = root.Right,root.Left
    dfs(root.Left)
    dfs(root.Right)
}

迭代代码如下

func invertTree(root *TreeNode) *TreeNode {

    var stk []*TreeNode
    res:=root
    for root != nil || len(stk)!= 0{
        for root != nil {
            root.Left,root.Right = root.Right,root.Left
            stk = append(stk,root)
            root = root.Left
        }
        root = stk[len(stk)-1].Right
        stk = stk[:len(stk)-1]
    }
    return res 
}

标签:Right,TreeNode,stk,二叉树,226,root,LeetCode,Left
From: https://www.cnblogs.com/lxing-go/p/17402744.html

相关文章

  • LeetCode 94. 二叉树的中序遍历
    题目链接:LeetCode94.二叉树的中序遍历题意:给定一个二叉树的根节点root,返回它的中序遍历。解题思路:对于二叉树的遍历,有递归和非递归两种遍历方式,1.递归遍历**根据“左->根->右”的顺序,直接模拟即可。注意按照递归三部曲(递归的参数和返回值、递归的终止条件、单层......
  • 二刷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)遍历所有元素。如果当前元素是整数,则压入栈;如果是运算符,则将栈顶两个元素弹出......