题解 | #牛群的相似结构#
牛群的相似结构
https://www.nowcoder.com/practice/ecaeef0d218440d295d9eff63fbc747c?tpId=354&tqId=10591473&ru=/exam/company&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Fcompany
知识点:
- 二叉树的基本概念:了解什么是二叉树、根节点、叶子节点等。
- 递归:理解递归的概念和用法,以及递归在解决树问题时的应用。
题目解答方法:
对于判断两个二叉树结构是否相同,以及编号是否相同,我们可以使用递归的方法进行比较。基本思路是从根节点开始,递归地比较左子树和右子树的结构和编号是否相同。
以下是用Java代码实现这个问题的思路:
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } } public class SameBinaryTreeStructure { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; // 两个树都为空,结构相同 } if (p == null || q == null) { return false; // 一个为空,一个不为空,结构不同 } if (p.val != q.val) { return false; // 根节点编号不同,结构不同 } return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); } }
在这段代码中,我们首先定义了一个 TreeNode 类来表示二叉树的节点。然后,我们创建了一个名为 isSameTree 的方法,该方法用于判断两个二叉树的结构和编号是否相同。
递归的终止条件包括:
- 如果两个树都为空,表示当前子树的结构相同,返回 true。
- 如果一个树为空而另一个不为空,表示当前子树的结构不同,返回 false。
- 如果根节点编号不同,表示结构不同,返回 false。
递归地比较左子树和右子树的结构和编号,如果都相同,则返回 true,否则返回 false。
这个方法的时间复杂度取决于二叉树的结构,最差情况下是 O(n),其中 n 是节点的数量。