算法通关村第八关-青铜挑战二叉树的经典题目

大家好我是苏麟 , 今天来说二叉树的经典题目

二叉树的双指针

所谓的双指针就是定义了两个变量,在二叉树中有时候也需要至少定义两个变量才能解决问题,这两个指针可能针对一棵树,也可能针对两棵树,我们姑且也称之为"双指针"吧。这些问题一般是与对称、反转和合并等类型相关,我们接下来就看一下相关高频问题。

判断两棵树是否相同

描述 :

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

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

题目 :

LeetCode 100.相同的树 :

100. 相同的树

分析 :

这个貌似就是两个二叉树同时进行前序遍历,先判断根节点是否相同,如果相同再分别判断左右子节点是否相同,判断的过程中只要有一个不相同就返回 false,如果全部相同才会返回true。

解析 :

java 复制代码
/**
 * 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);
    }
}

对称二叉树

描述 :

给你一个二叉树的根节点 root , 检查它是否轴对称。

题目:

LeetCode 101.对称二叉树

101. 对称二叉树

分析:

我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等 .

解析 :

java 复制代码
/**
 * 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){
            return true;
        }
        TreeNode p = root;
        TreeNode q = root;
        return is(p,q);
    }
    public boolean is(TreeNode left ,TreeNode right){
        if(left == null && right == null){
            return true;
        }
        if((left != null && right == null) ||( right != null && left ==null)){
            return false;
        }
        if(left.val != right.val){
            return false;
        }
        return is(left.left,right.right) && is(left.right,right.left);
    }
}

这期就到这里 , 下期见!

相关推荐
橘猫云计算机设计8 分钟前
基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·考研·django·毕业设计
时光呢12 分钟前
JAVA常见的 JVM 参数及其典型默认值
java·开发语言·jvm
程序媛学姐21 分钟前
SpringKafka错误处理:重试机制与死信队列
java·开发语言·spring·kafka
奋进的小暄30 分钟前
贪心算法(15)(java)用最小的箭引爆气球
算法·贪心算法
向阳25638 分钟前
SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程)
java·vue.js·spring boot·后端·sa-token·springboot·登录流程
Scc_hy43 分钟前
强化学习_Paper_1988_Learning to predict by the methods of temporal differences
人工智能·深度学习·算法
巷北夜未央44 分钟前
Python每日一题(14)
开发语言·python·算法
javaisC1 小时前
c语言数据结构--------拓扑排序和逆拓扑排序(Kahn算法和DFS算法实现)
c语言·算法·深度优先
爱爬山的老虎1 小时前
【面试经典150题】LeetCode121·买卖股票最佳时机
数据结构·算法·leetcode·面试·职场和发展
SWHL1 小时前
rapidocr 2.x系列正式发布
算法