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

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

二叉树的双指针

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

判断两棵树是否相同

描述 :

给你两棵二叉树的根节点 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);
    }
}

这期就到这里 , 下期见!

相关推荐
暗黑起源喵5 分钟前
设计模式-工厂设计模式
java·开发语言·设计模式
昂子的博客9 分钟前
基础数据结构——队列(链表实现)
数据结构
WaaTong10 分钟前
Java反射
java·开发语言·反射
咕咕吖11 分钟前
对称二叉树(力扣101)
算法·leetcode·职场和发展
九圣残炎43 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge1 小时前
Netty篇(入门编程)
java·linux·服务器
lulu_gh_yu1 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!1 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
雷神乐乐1 小时前
Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上
java·maven