摘要:原题检查两棵二叉树是否在经过若干次扭转后可以等价。扭转的定义是,交换任意节点的左右子树。等价的定义是,两棵二叉树必须为相同的结构,并且对应位置上的节点的值要相等。样例是扭转后可等价的二叉树。
原题
检查两棵二叉树是否在经过若干次扭转后可以等价。扭转的定义是,交换任意节点的左右子树。等价的定义是,两棵二叉树必须为相同的结构,并且对应位置上的节点的值要相等。
注意:你可以假设二叉树中不会有重复的节点值。
样例
1 1
/ /
2 3 and 3 2
/
4 4
是扭转后可等价的二叉树。
1 1
/ /
2 3 and 3 2
/ /
4 4
就不是扭转后可以等价的二叉树。
解题思路
Recursion - 递归求解,分治的思路。
注意,题目中说的是经过若干次扭转后可以等价,所以不要忘记考虑完全identical的情况,某一个节点的左右子树翻转一次对称,反转两次还原。
文/Jason_Yuan(简书作者)
原文链接:http://www.jianshu.com/p/0623...
public boolean isTweakedIdentical(TreeNode a, TreeNode b) { if (a == null && b == null) { return true; } if (a == null || b == null) { return false; } if (a.val != b.val){ return false; } //divide // boolean left = isTweakedIdentical(a.left, b.right); // boolean right = isTweakedIdentical(a.right, b.left); //注意,题目中说的是经过若干次扭转后可以等价,所以不要忘记考虑完全identical的情况,某一个节点的左右子树翻转一次对称,反转两次还原。 boolean left = isTweakedIdentical(a.left, b.left) || isTweakedIdentical(a.left, b.right); boolean right = isTweakedIdentical(a.right, b.right) || isTweakedIdentical(a.right, b.left); //conquer // if (left != true || right != true){ // return false; // } // else{ // return true; // } return left && right; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66439.html
problem Check if two binary trees are identical. Identical means the two binary trees have the same structure and every identical position has the same value. Example 1 1 / ...
摘要:递归法复杂度时间空间递归栈空间思路如果两个根节点一个为空,一个不为空,或者两个根节点值不同,说明出现了不一样的地方,返回假。代码递归法复杂度时间空间递归栈空间思路其实和写法是一样的,是比较两个节点的两个左边,然后再比较两个节点的两个右边。 Same Tree Given two binary trees, write a function to check if they are eq...
摘要:判断两棵树是否是相同题目要求传入两棵树的根节点,判断这两棵树是否相同此题的核心就在于如何遍历树。定义树的一种自然方式是递归的方式。一棵树是一些节点的集合,这个集合可以是空集。这个遍历算法可以用于场景如,计算一个节点的高度。 判断两棵树是否是相同 题目要求:传入两棵树的根节点,判断这两棵树是否相同此题的核心就在于如何遍历树。一旦我们解决了这个问题,题目也就迎刃而解了。下面就来介绍一下 关...
阅读 2484·2023-04-25 22:09
阅读 988·2021-11-17 17:01
阅读 1442·2021-09-04 16:45
阅读 2566·2021-08-03 14:02
阅读 755·2019-08-29 17:11
阅读 3232·2019-08-29 12:23
阅读 1062·2019-08-29 11:10
阅读 3255·2019-08-26 13:48