站内seo优化发布页全部页面设计
站内seo优化,发布页全部页面设计,网站建设具备哪些技术人员,南京网站建设哪家专业目录
解法#xff1a;
官方解法#xff1a;
方法一#xff1a;深度优先搜索
复杂度分析
时间复杂度#xff1a;
空间复杂度#xff1a;
方法二#xff1a;广度优先搜索
复杂度分析
时间复杂度#xff1a;
空间复杂度#xff1a; 给你两棵二叉树的根节点 p 和…目录
解法
官方解法
方法一深度优先搜索
复杂度分析
时间复杂度
空间复杂度
方法二广度优先搜索
复杂度分析
时间复杂度
空间复杂度 给你两棵二叉树的根节点 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提示
两棵树上的节点数目都在范围 [0, 100] 内-10^4 Node.val 10^4
解法
用深度优先遍历的方法将树中的元素分别取出用StringBuilder进行接收然后用equals方法判断是否相同。
/*** 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) {StringBuilder sb1 new StringBuilder();StringBuilder sb2 new StringBuilder();hasNextNode(p, sb1);hasNextNode(q, sb2);return sb1.toString().equals(sb2.toString());}public void hasNextNode(TreeNode root, StringBuilder sb) {if (root null) {return;} else {sb.append(root.val).append(-);}if (root.left ! null) {hasNextNode(root.left, sb);} else {sb.append(-);}if (root.right ! null) {hasNextNode(root.right, sb);} else {sb.append(-);}}
} 官方解法
方法一深度优先搜索
如果两个二叉树都为空则两个二叉树相同。如果两个二叉树中有且只有一个为空则两个二叉树一定不相同。
如果两个二叉树都不为空那么首先判断它们的根节点的值是否相同若不相同则两个二叉树一定不同若相同再分别判断两个二叉树的左子树是否相同以及右子树是否相同。这是一个递归的过程因此可以使用深度优先搜索递归地判断两个二叉树是否相同。
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p null q null) {return true;} else if (p null || q null) {return false;} else if (p.val ! q.val) {return false;} else {return isSameTree(p.left, q.left) isSameTree(p.right, q.right);}}
}
复杂度分析
时间复杂度
O(min(m,n))其中 m 和 n 分别是两个二叉树的节点数。对两个二叉树同时进行深度优先搜索只有当两个二叉树中的对应节点都不为空时才会访问到该节点因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度
O(min(m,n))其中 m 和 n 分别是两个二叉树的节点数。空间复杂度取决于递归调用的层数递归调用的层数不会超过较小的二叉树的最大高度最坏情况下二叉树的高度等于节点数。
方法二广度优先搜索
也可以通过广度优先搜索判断两个二叉树是否相同。同样首先判断两个二叉树是否为空如果两个二叉树都不为空则从两个二叉树的根节点开始广度优先搜索。
使用两个队列分别存储两个二叉树的节点。初始时将两个二叉树的根节点分别加入两个队列。每次从两个队列各取出一个节点进行如下比较操作。
1.比较两个节点的值如果两个节点的值不相同则两个二叉树一定不同
2.如果两个节点的值相同则判断两个节点的子节点是否为空如果只有一个节点的左子节点为空或者只有一个节点的右子节点为空则两个二叉树的结构不同因此两个二叉树一定不同
3.如果两个节点的子节点的结构相同则将两个节点的非空子节点分别加入两个队列子节点加入队列时需要注意顺序如果左右子节点都不为空则先加入左子节点后加入右子节点。
如果搜索结束时两个队列同时为空则两个二叉树相同。如果只有一个队列为空则两个二叉树的结构不同因此两个二叉树不同。
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p null q null) {return true;} else if (p null || q null) {return false;}QueueTreeNode queue1 new LinkedListTreeNode();QueueTreeNode queue2 new LinkedListTreeNode();queue1.offer(p);queue2.offer(q);while (!queue1.isEmpty() !queue2.isEmpty()) {TreeNode node1 queue1.poll();TreeNode node2 queue2.poll();if (node1.val ! node2.val) {return false;}TreeNode left1 node1.left, right1 node1.right, left2 node2.left, right2 node2.right;if (left1 null ^ left2 null) {return false;}if (right1 null ^ right2 null) {return false;}if (left1 ! null) {queue1.offer(left1);}if (right1 ! null) {queue1.offer(right1);}if (left2 ! null) {queue2.offer(left2);}if (right2 ! null) {queue2.offer(right2);}}return queue1.isEmpty() queue2.isEmpty();}
}
复杂度分析
时间复杂度
O(min(m,n))其中 m 和 n 分别是两个二叉树的节点数。对两个二叉树同时进行广度优先搜索只有当两个二叉树中的对应节点都不为空时才会访问到该节点因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度
O(min(m,n))其中 m 和 n 分别是两个二叉树的节点数。空间复杂度取决于队列中的元素个数队列中的元素个数不会超过较小的二叉树的节点数。 官方解法部分:
作者力扣官方题解 链接https://leetcode.cn/problems/same-tree/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88647.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!