Same Tree 序列化二叉树
2024-09-29 23:57:52
https://oj.leetcode.com/problems/same-tree/
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null)
return true;
if(p != null && q != null && p.val == q.val){
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}else{
return false;
}
}
}
解题思路:
递归。两个树相等,当且仅当当前节点value相等,并且左右两个子树也都相等。
退出条件:
当前节点为空。
注意点:
搞清楚当前阶段null和left或right为null的区别。
或者下面的代码更清楚一点
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public 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 != null && q == null){
return false;
}else if(p.val != q.val){
return false;
}else{
//if(p.val == q.val)
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
}
}
还有一种解法,不是很straight forward,但是给了另一种思路。
和 Anagrams 的题目类似,我们考虑给same tree一样的一种code,或者叫签名,不同的tree不同的code。这样对两棵树进行操作后,比较他们的code就可以了。这实际上是一种serializatin的思路——将二叉树序列化表示。
这里直接讲出结论,只有preorder和level order的traversal是可以序列化二叉树的,inorder和postorder不可以,得出的code无法回头生成原来的二叉树。思考一下,为什么?代码直接给出,如下。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
StringBuffer result_p = new StringBuffer();
StringBuffer result_q = new StringBuffer(); preOrder(p, result_p);
preOrder(q, result_q); return result_p.toString().equals(result_q.toString());
} public void preOrder(TreeNode root, StringBuffer result){
if(root == null){
result.append("#");
return;
}
result.append(root.val);
preOrder(root.left, result);
preOrder(root.right, result);
}
}
最新文章
- 交互式makefile
- Openstack+Kubernetes+Docker微服务实践之路--弹性扩容
- 利用LruCache为GridView异步加载大量网络图片完整示例
- radio button(单选按钮)
- eXosip2代码分析
- Part 6 Group by in sql server
- java_设计模式_观察者模式_Observer Pattern(2016-07-27)
- linux cmd: ps
- oracle学习笔记(1)-三级模式SCHEMA
- linux 每个小时释放一次cache
- linux vi粘贴格式易错乱
- db2一、查询
- docker配置阿里云镜像加速
- hive分区表
- pip in windows
- kotlin-2(IdeaIU-2018.2汉化破解)
- java疯狂讲义--摘要
- linux下查看和修改文件时间
- CentOS6.5安装vncserver实现图形化访问
- 如何快速开发一个支持高效、高并发的分布式ID生成器
热门文章
- sqlserver同一个局域网内,把服务器数据库备份到客户端
- 82-Ichimoku Kinko Hyo 一目平衡表.(2015.7.3)
- MSP430F5529时钟系统深究
- Mysql学习总结(43)——MySQL主从复制详细配置
- STM32F407 跑马灯 寄存器版 个人笔记
- Eclipse调试相关
- [BZOJ3555] [Ctsc2014]企鹅QQ(Hash)
- [NOIP2006] 提高组 洛谷P1064 金明的预算方案
- 安装最新版本的zabbix
- 洛谷 P4379 [USACO18OPEN]Lemonade Line