栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode刷题:二叉树13(相同的树)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode刷题:二叉树13(相同的树)

100. 相同的树

力扣题目链接

给定两个二叉树,编写一个函数来检验它们是否相同。

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

傻瓜式方法,按p的轨迹遍历运行一遍,再按q的轨迹遍历运行一遍。

package com.programmercarl.tree;

import lombok.val;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;


public class IsSameTree {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        TreeNode tempP=p;
        TreeNode tempQ=q;
        Stack stackP = new Stack();
        Stack stackQ = new Stack();
        while (p != null || !stackP.isEmpty()) {
            if (p != null) {
                stackP.push(p);
                stackQ.push(q);
                p = p.left;
                if (q == null || stackP.isEmpty()) {
                    return false;
                }
                q = q.left;
            } else {
                p = stackP.pop();
                q = stackQ.pop();
                if (p.val != q.val) {
                    return false;
                }
                p = p.right;
                q = q.right;
            }
        }

        Stack stackp = new Stack();
        Stack stackq = new Stack();
        while (tempQ != null || !stackq.isEmpty()) {
            if (tempQ != null) {
                stackp.push(tempP);
                stackq.push(tempQ);
                tempQ= tempQ.left;
                if (tempP == null || stackp.isEmpty()) {
                    return false;
                }
                tempP= tempP.left;
            } else {
                tempP = stackp.pop();
                tempQ = stackq.pop();
                if (tempP.val != tempQ.val) {
                    return false;
                }
                tempP = tempP.right;
                tempQ = tempQ.right;
            }
        }

        return true;
    }
}

看看大佬的 递归+迭代

    public boolean isSameTree(TreeNode p, TreeNode q) {
        return compare(p, q);
    }

    //可以看成两个子树,左右子树
    private boolean compare(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;
        }
        boolean leftResult = compare(left.left, right.left);
        boolean rightResult = compare(left.right, right.right);
        return leftResult && rightResult;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号