相同二叉树和镜面二叉树问题

相同二叉树和镜面二叉树问题

作者:Grey

原文地址:

博客园:相同二叉树和镜面二叉树问题

CSDN:相同二叉树和镜面二叉树问题

判断两棵树是否是相同的树

题目描述见: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); } 

更多

算法和数据结构学习笔记

算法和数据结构学习代码

参考资料

算法和数据结构体系班-左程云

发表评论

评论已关闭。

相关文章