相同二叉树和镜面二叉树问题
相同二叉树和镜面二叉树问题
作者:Grey
原文地址:
判断两棵树是否是相同的树#
题目描述见:LeetCode 100. Same Tree
即:如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
比如:
两个树结构完全一致,对应位置上的值也一致,即为相同的树,以下两种情况都不是相同的树:
思路也很简单,首先,两棵空树是相同的树,只有一棵树是空树,则一定不是相同的树,即
if (p == null || q == null) {
// 两个同时为空才表示 same tree
return q == null && p == null;
}
除此以外,两棵树的头节点的值相等,才有可能是相同的树
p.val == q.val
而且,还需要满足,p 的左子树和 q 的左子树是相同的树且 p 的右子树和 q 的右子树是相同的树,这几个条件同时满足,才是相同的树,以上条件整合一下,即:
return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
完整代码为
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null || q == null) {
// 两个树同时为空才表示 same tree
return q == null && p == null;
}
return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
镜面二叉树问题#
题目描述见:LeetCode 101. Symmetric Tree
即:判断一个树是否轴对称。
比如这个二叉树,就是轴对称的:
以下这个二叉树,就不是轴对称的,
本题的思路如下:
首先,空树一定是镜面二叉树
if (null == root) {
return true;
}
此外,左右子树同时为空的时候,是镜面二叉树
if (root.left == null || root.right == null) {
return root.left == null && root.right == null;
}
接下来定义递归函数
boolean isSymmetric(TreeNode left, TreeNode right)
递归含义是:判断 left 和 right 这两棵树是否是镜面对称。
base case 是
if (left == null || right == null) {
// 两棵树同时为空才镜面对称
return left == null && right == null;
}
普遍情况,首先要满足,left 树头节点的值和 right 树头节点的值一样,然后是 left 的左子树和 right 的右子树镜面对称,且 left 树的右子树和 right 树的左子树镜面对称,三个条件同时满足,left 和 right 才镜面对称
public boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null || right == null) {
return left == null && right == null;
}
// left.val == right.val
return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
主函数直接调用这个递归方法:
public boolean isSymmetric(TreeNode root) {
if (null == root) {
return true;
}
if (root.left == null || root.right == null) {
return root.left == null && root.right == null;
}
return root.left.val == root.right.val && isSymmetric(root.left, root.right);
}
更多#
参考资料#
作者:GreyZeng
出处:https://www.cnblogs.com/greyzeng/p/16971977.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
你可以在这里自定义其他内容
本文来自博客园,作者:Grey Zeng,转载请注明原文链接:https://www.cnblogs.com/greyzeng/p/16971977.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2022-12-19 架构设计(七):日志、监控和自动化