首页 > 其他分享 >11.24打卡

11.24打卡

时间:2023-11-24 17:34:40浏览次数:32  
标签:right TreeNode val int 11.24 打卡 root left

1. 相同的树(100)

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

/**
 * 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 boolean isSameTree(TreeNode p, TreeNode q) {
        if(p==null&&q==null)
            return true;

        if(p==null||q==null)
            return  false;

        if(p.val != q.val)   
            return false;

        return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }
}

2. 对称二叉树(101)

给你一个二叉树的根节点 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 boolean isSymmetric(TreeNode root) {
       if(root==null||(root.left==null&&root.right==null))
            return true;
        TreeNode left=root.left;
        TreeNode right = root.right;
        return is_symmetric( left, right);
    }

    private boolean is_symmetric(TreeNode left, TreeNode right) {
        if(left==null && right==null){
            return true;
        }
        if(left==null||right==null){
            return false;
        }
        if(left.val!=right.val)
            return false;
        return is_symmetric(left.left,right.right)&&is_symmetric(left.right,right.left);
    }
}

3. 二叉树的层次遍历(102)

给你二叉树的根节点 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 List<List<Integer>> levelOrder(TreeNode root) {
         Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res =new ArrayList<>();
        if(root!=null)
            queue.add(root);
        while (!queue.isEmpty()){
            List<Integer> temp =  new ArrayList<>();
            for (int i = queue.size(); i >0 ; i--) {
                TreeNode node = queue.poll();
                temp.add(node.val);
                if(node.left !=null)
                    queue.add(node.left);
                if(node.right!=null)
                    queue.add(node.right);
            }
            res.add(temp);
        }
        return res;
    }
}

4. 二叉树锯齿形层次(103)

给你二叉树的根节点 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 List<List<Integer>> zigzagLevelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res =new ArrayList<>();
        if(root!=null)
            queue.add(root);
        while (!queue.isEmpty()){
            LinkedList<Integer> temp =  new LinkedList<>();
            for (int i = queue.size(); i >0 ; i--) {
                TreeNode node = queue.poll();
                if(res.size() %2==0)
                    temp.addLast(node.val);
                else  temp.addFirst(node.val);
                if(node.left !=null)
                    queue.add(node.left);
                if(node.right!=null)
                    queue.add(node.right);
            }
            res.add(temp);
        }
        return res;
    }
}

5. 二叉树的最大深度(104)

给定一个二叉树 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 int maxDepth(TreeNode root) {
         if(root==null) return 0;
        if(root.left==null&&root.right==null)
            return 1;
        return Math.max(maxDepth(root.left)+1,maxDepth(root.right)+1);
  
    }
}

6. 从前序、中序构造二叉树(105)

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

/**
 * 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 {
 
    private Map<Integer,Integer> map;
    private  int[] preorder;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        this.preorder =preorder;
        map =  new HashMap<>();
        for (int i = 0; i < inorder.length; i++) {
            map.put(inorder[i],i);
        }
        return dfsbuild(0,preorder.length-1,0);
        
    }

    private TreeNode dfsbuild(int prestart, int preend , int instart) {
        if(prestart>preend)
            return null;
        int rootval = preorder[prestart];
        int inid=map.get(rootval);
        TreeNode root = new TreeNode(rootval);
        int leftnum = inid-instart;
        root.left=dfsbuild(prestart+1,prestart+leftnum,instart);
        root.right=dfsbuild(prestart+leftnum+1,preend,inid+1);
        return root;
    }
}

 

标签:right,TreeNode,val,int,11.24,打卡,root,left
From: https://www.cnblogs.com/forever-fate/p/17854290.html

相关文章

  • 11.24每日总结
    importmatplotlibasmatplotlibimportnumpyasnpimportpandasaspdimportseabornassnsfrompandasimportDataFrame,Series#可视化显示在界面#matplotlibinlineimportmatplotlibimportmatplotlib.pyplotaspltfromwordcloudimportSTOPWORDS,......
  • 11.24每日总结
    今天上课完成了大数据的测试。王S聪想要在海外开拓万D电影的市场,这次他在考虑:怎么拍商业电影才能赚钱?毕竟一些制作成本超过1亿美元的大型电影也会失败。这个问题对电影业来说比以往任何时候都更加重要。所以,他就请来了你(数据分析师)来帮他解决问题,给出一些建议,根据数据......
  • 【11月LeetCode组队打卡】Task3--BinaryTree
    树基本术语:节点的度:叶子节点=0分支节点:含有的子树个数节点关系:父,子,兄节点层次:根节点:1floor路径:两节点间经过的节点序列路径长度:路径上的边数树的分类:节点子树是否可以互换位置:有序树:从左到右各子树依次有序(不能互换无序树二叉......
  • 11.21打卡
    1.复制IP(93)有效IP地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无效 IP地址。给定一个只......
  • 11月20每日打卡
    [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。实验要求:1. 搜集并掌握JAVA和C++中常见的数据结构......
  • 【11月LeetCode组队打卡】Task2--TrieTree
    字典树Trie音同try,又称前缀树,是一颗有根树,根节点到树节点的一个路径就代表一个单词,多用于关键词检索,自动补完和拼写检查用空间换时间:借公共前缀来降低查询时间的开销根节点无内容(参考:字典树TrieTree图文详解——CSDN实现Trie题解——力扣)208.实现Trie复习一下this......
  • 【11月LeetCode组队打卡】Task2--String & StringMatch
    在CSP里面好多道“水题“基本都离不开字符串/数组的模拟滚动哈希,字典树,DP几个强强联合基本可以横扫所有难度的字符串算法了,所以在这个task里会好好消化其中前二字符串和数组有很多相似之处,比如同样使用下标的方式来访问单个字符。根据字符串的特点,将字符串问题分为以下几种:字......
  • 20231117打卡
    早上起床后,感觉有点疲劳,于是决定给自己放松的一天。下午,我和一些朋友一起去篮球场打篮球。打篮球不仅可以锻炼身体,还可以放松心情,释放压力。我们组织了几场友谊赛,不仅锻炼了身体,还增进了彼此之间的友谊。晚上回到宿舍后,我选择了玩一会儿游戏,选择的游戏是最近非常火爆的《原神》。......
  • 11.17打卡
    1.分割链表(86)给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置思想:双链表存储/***Definitionforsingly-linkedlist.*publicclas......
  • 20231116打卡
    早上,我有一门UML和算法与数据结构的上机实验课。这门课程旨在培养我们对软件设计和算法实现的能力。在实验课上,我们运用UML(统一建模语言)来设计和建模软件系统,同时编写代码实现各种经典的算法和数据结构,例如排序和查找算法、链表和树等。通过这些实际操作,我加深了对软件工程理论的......