首页 > 其他分享 >力扣 递归 迭代 栈 广度 队列 之 226. 翻转二叉树

力扣 递归 迭代 栈 广度 队列 之 226. 翻转二叉树

时间:2024-02-13 11:00:14浏览次数:18  
标签:current right TreeNode 力扣 二叉树 226 null root left

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

 

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

/**  * 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 TreeNode invertTree(TreeNode root) {         if (root == null) {             return null;         }                 Stack<TreeNode> stack = new Stack<>();         stack.push(root);                 while (!stack.isEmpty()) {             TreeNode current = stack.pop();             TreeNode temp = current.left;             current.left = current.right;             current.right = temp;                         if (current.left != null) {                 stack.push(current.left);             }             if (current.right != null) {                 stack.push(current.right);             }         }                 return root;     } }   递归 class Solution {     public TreeNode invertTree(TreeNode root) {                 if(root==null){             return null;         }         TreeNode temp = root.left;         root.left = root.right;         root.right = temp;         invertTree(root.left);         invertTree(root.right);         return root;
    } } 广度遍历 迭代     class Solution {
    public TreeNode invertTree(TreeNode root) {         if (root == null) {             return null;         }         // 将二叉树中的节点逐层放入队列中,再迭代处理队列中的元素         Queue<TreeNode> queue = new LinkedList<TreeNode>();         queue.add(root);         while (!queue.isEmpty()) {             // 每次都从队列中拿一个节点,并交换这个节点的左右子树             // 先进先出             TreeNode tmp = queue.poll();             TreeNode left = tmp.left;             tmp.left = tmp.right;             tmp.right = left;             // 如果当前节点的左子树不为空,则放入队列等待后续处理             if (tmp.left != null) {                 queue.add(tmp.left);             }             // 如果当前节点的右子树不为空,则放入队列等待后续处理             if (tmp.right != null) {                 queue.add(tmp.right);             }         }         // 返回处理完的根节点         return root;     } }


标签:current,right,TreeNode,力扣,二叉树,226,null,root,left
From: https://www.cnblogs.com/JavaYuYin/p/18014396

相关文章

  • 623 在二叉树中增加一行
    深度遍历,就是遍历:1.先要确定有几种情况,像这道题,深度为1,2就是最基本的情况,分为两种处理;2.根据不同情况,进行不同处理,不需要考虑后面递归的传递。3.确认传递的方式,如果函数返回的是指针,就需要left,right接住。完整代码:点击查看代码classSolution{public:TreeNode*ad......
  • 力扣递归 深度优先搜索 之 104. 二叉树的最大深度
    给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例1: 输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2/** *Definitionforabinarytreenode. *publicclassTre......
  • 力扣 145. 二叉树的后序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣 144. 二叉树的前序遍历 递归 迭代
    递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodelef......
  • 力扣94. 二叉树的中序遍历 递归&迭代
    给定一个二叉树的根节点root,返回它的中序 遍历。 示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1] 递归/** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval;......
  • 力扣回溯 之46. 全排列
    给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。 示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2:输入:nums=[0,1]输出:[[0,1],[1,0]]示例3:输入:nums=[1]输出:[[1]]importjava.......
  • 力扣回溯 深度优先搜索 dfs 之 17. 电话号码的字母组合
    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。 示例1:输入:digits="23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf&qu......
  • 力扣回溯 深度优先搜索dfs之78. 子集
    给你一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。 示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2:输入:nums=[0]输出:[[],[0]] classSol......
  • 力扣递归 两道简单题合成一道中等题之148. 排序链表
    递归归并排序,先找到终点,再合并两个链表 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]/** *Definitionforsingl......
  • 力扣快慢双指针之876. 链表的中间结点
    给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 示例1:输入:head=[1,2,3,4,5]输出:[3,4,5]解释:链表只有一个中间结点,值为3。示例2:输入:head=[1,2,3,4,5,6]输出:[4,5,6]解释:该链表有两个中间结点,值分别为3......