首页 > 编程语言 >代码随想录算法训练营第十五天|● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2

代码随想录算法训练营第十五天|● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2

时间:2023-06-07 22:32:34浏览次数:71  
标签:right return root 随想录 二叉树 null 第十五天 left

102.二叉树的层序遍历

力扣题目链接(opens new window)

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

代码随想录算法训练营第十五天|● 层序遍历  10  ● 226.翻转二叉树  ● 101.对称二叉树 2 _ide

思路:

迭代法,非递归思路,借用队列,先进先出来达到层序遍历的效果。但写的过程中,我不知道该如何让同一层的数据都保存在一个数组里。

看了题解发现,可以用队列的长度len来表达同一层的节点个数,当len>0,那么节点的所有数值都保存在一个数组中。

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        Deque<TreeNode> deq = new LinkedList<>();
        if(root == null) return res;
        deq.offer(root);
        while(!deq.isEmpty()){
            List<Integer> res1 = new ArrayList<>();
            int len = deq.size();
            while(len > 0){
                TreeNode node = deq.poll();
                res1.add(node.val);
                if(node.left != null) deq.offer(node.left);
                if(node.right != null) deq.offer(node.right);
               
                len--;
            }
            res.add(res1);
        }
        return res;
    }
}

226.翻转二叉树

力扣题目链接(opens new window)

翻转一棵二叉树。

代码随想录算法训练营第十五天|● 层序遍历  10  ● 226.翻转二叉树  ● 101.对称二叉树 2 _二叉树_02

这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树,最后被Google拒绝了。(真假不做判断,权当一个乐子哈)

思路:

递归法稍微好理解一些,根据前后序遍历,先反转左右孩子,再反转左右子树。

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;
        invertTree(root.left);
        invertTree(root.right);
        swap(root);
        return root;
    }

    void swap(TreeNode root){
        TreeNode tmp = root.right;
        root.right = root.left;
        root.left = tmp;
    }
}

101. 对称二叉树

力扣题目链接(opens new window)

给定一个二叉树,检查它是否是镜像对称的。

代码随想录算法训练营第十五天|● 层序遍历  10  ● 226.翻转二叉树  ● 101.对称二叉树 2 _ide_03

思路:

镜像对称,外侧对外侧,内侧对内侧,递归判断是否对称。

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return compare(root.left, root.right);
    }
    boolean compare(TreeNode left, TreeNode right){
        if(left != null && right == null){
            return false;
        }
        if(left == null && right != null){
            return false;
        }
        if(left == null && right == null){
            return true;
        }
        if(left.val != right.val){
            return false;
        }
        boolean compareoutside = compare(left.left, right.right);
        boolean compareinside = compare(left.right, right.left);
        return compareinside && compareoutside;
    }
 }


标签:right,return,root,随想录,二叉树,null,第十五天,left
From: https://blog.51cto.com/u_15505301/6435942

相关文章

  • 二叉树
    (不是太太太理解)1、结构体定义typedefstructBiTNode{TElemTypedata;structBiTNode*lchild,*rchild;}BiTNode;2、构造二叉树intCreateBTree(BiTNode**tp)//?{//构造方法,或者说构造顺序,从左子树开始构造intx;printf("pleaseinpyutint......
  • 数据结构与算法-06树及二叉树
    树和二叉树完全二叉树:除了最下层,每一层都满了满二叉树:每一层都满了平衡二叉树:任意两个节点的高度差不大于1排序二叉树:链式存储常见应用场景xml/html解析路由协议mysql数据库索引文件系统结构二叉树在二叉树的第i层上至多有2^(i-1)个结点深度为k的二叉树......
  • 【锐格】数据结构-实验-二叉树
    7075#include<iostream>#include<cstdio>usingnamespacestd;typedefstructTNode{chardata;structTNode*lchild,*rchild;}BiNode,*BiTree;BiTreeT;voidcreateTree(BiTree&T){charch;cin>>ch;if(ch==&#......
  • 代码随想录算法训练营第十四天|理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代
    理论基础满二叉树概念完全二叉树概念二叉搜索树概念平衡二叉搜索树概念二叉树存储方式:链式存储和顺序存储二叉树遍历方式:前中后序遍历,层次遍历。二叉树的代码定义publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.v......
  • 30. 平衡二叉树
    一、什么是平衡二叉树  平衡二叉树(BalanceFactorTree,简称AVL树)是一个特殊的二叉树,它可以是空树。如果不为空,它任一节点左、右子树高度差的绝对值不超过1,即|BF(T)|≤1。其中,BF是指平衡因子(BalanceFactory):\(BF(T)=h_{L}-h_{R}\),其中\(h_{L}\)和\(h_{R}\)分别为......
  • 代码随想录算法训练营第十三天|● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总
    239.滑动窗口最大值力扣题目链接(opensnewwindow)给定一个数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?提示:1<......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉树的右视图
    1.简述:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例2:输入: [1,null,3]输出: [1,3]示例3:输入: []输出: []2.代码实现:classSolution{publicList<I......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉树中的最大路径和
    题目:二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。路径和是路径中各节点值的总和。给你一个二叉树的根节点root,返回其最大路径和。 示例1:输入:root=......
  • 2023-06-06:给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位
    2023-06-06:给你二叉树的根结点root,请你设计算法计算二叉树的垂序遍历序列。对位于(row,col)的每个结点而言,其左右子结点分别位于(row+1,col-1)和(row+1,col+1)树的根结点位于(0,0)。二叉树的垂序遍历从最左边的列开始直到最右边的列结束,按列索引每一列上......
  • 2023-06-06:给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位
    2023-06-06:给你二叉树的根结点root,请你设计算法计算二叉树的垂序遍历序列。对位于(row,col)的每个结点而言,其左右子结点分别位于(row+1,col-1)和(row+1,col+1)树的根结点位于(0,0)。二叉树的垂序遍历从最左边的列开始直到最右边的列结束,按列索引每一......