本文主要是介绍算法---------寻找重复的子树(Java版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1:1/ \2 3/ / \4 2 4/4
下面是两个重复的子树:2/4
和4
因此,你需要以列表的形式返回上述重复子树的根结点。
解决方法:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {HashMap<String,Integer> treeNodeMap = new HashMap<>();List<TreeNode> treeNodes = new ArrayList<>();public List<TreeNode> findDuplicateSubtrees(TreeNode root) {computerNode(root);return treeNodes;}public String computerNode(TreeNode node){if (node == null) {return "";}String key = node.val + "-" + computerNode(node.left) + " -" + computerNode(node.right);int value = treeNodeMap.getOrDefault(key, 0) + 1;treeNodeMap.put(key, value);if (value == 2) {treeNodes.add(node);}return key;}
}
这篇关于算法---------寻找重复的子树(Java版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!