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

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

二叉树的双指针

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

判断两棵树是否相同

描述 :

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

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

题目 :

LeetCode 100.相同的树 :

100. 相同的树

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

分析 :

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

解析 :

/**
 * 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. 对称二叉树

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

分析:

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

解析 :

/**
 * 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);
    }
}

这期就到这里 , 下期见!

你可能感兴趣的:(算法村,算法,数据结构,leetcode,java)