- 题目
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 - 示例
示例 1: 输入:p = [1,2,3], q = [1,2,3] 输出:true 示例 2: 输入:p = [1,2], q = [1,null,2] 输出:false 示例 3: 输入:p = [1,2,1], q = [1,1,2] 输出:false - 解题思路
- 方法一:两棵树相同,那么两棵树的前中后序遍历结果都相同。
- 方法二:递归。两棵树相同,那么两棵树的左子树,和右子树都相同。
- 代码(Java)
// 方法一 class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if ((p == null && q != null) || (p != null && q == null)) { return false; } StringBuilder sbp = new StringBuilder(); StringBuilder sbq = new StringBuilder(); pre(sbp, p); pre(sbq, q); if (!sbp.toString().equals(sbq.toString())) { return false; } sbp = new StringBuilder(); sbq = new StringBuilder(); mid(sbp, p); mid(sbq, q); if (!sbp.toString().equals(sbq.toString())) { return false; } sbp = new StringBuilder(); sbq = new StringBuilder(); back(sbp, p); back(sbq, q); if (!sbp.toString().equals(sbq.toString())) { return false; } return true; } public void pre(StringBuilder sb, TreeNode root) { if (root == null) { sb.append("-"); return; } sb.append(root.val); pre(sb, root.left); pre(sb, root.right); } public void mid(StringBuilder sb, TreeNode root) { if (root == null) { sb.append("-"); return; } mid(sb, root.left); sb.append(root.val); mid(sb, root.right); } public void back(StringBuilder sb, TreeNode root) { if (root == null) { sb.append("-"); return; } mid(sb, root.left); mid(sb, root.right); sb.append(root.val); } }// 方法二 class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if ((p == null && q != null) || (p != null && q == null)) { return false; } return q.val == p.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right); } }
LeetCode100 相同的树
Java实现:判断两棵二叉树结构和节点值是否相同的算法
最新推荐文章于 2025-12-01 22:20:41 发布
文章讲述了如何用Java实现一个函数,比较两棵二叉树是否结构相同且节点值相等。提供了两种方法,一种是利用前中后序遍历的字符串比较,另一种是递归的直接比较子树。
263

被折叠的 条评论
为什么被折叠?



