Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到最大公共子树_Algorithm_Hash_Tree - Fatal编程技术网

Algorithm 如何找到最大公共子树

Algorithm 如何找到最大公共子树,algorithm,hash,tree,Algorithm,Hash,Tree,有一棵树,树被定义为 public class TreeNode { int val; vector<TreeNode *> children; TreeNode(int x) { val = x; } } 根为3和4的子树是最大公共子树(注意,可能有两个以上的子树是公共子树) 输出最大子树的根 我认为蛮力方法不好,散列怎么样,但我不知道如何散列 树的结构 散列听起来不错。让我们切换到一般树的二叉树表示,其中二叉树的左

有一棵树,树被定义为

public class TreeNode 
{
    int val;      
    vector<TreeNode *> children;      
    TreeNode(int x) { val = x; }      
} 
根为3和4的子树是最大公共子树(注意,可能有两个以上的子树是公共子树)

输出最大子树的根

我认为蛮力方法不好,散列怎么样,但我不知道如何散列
树的结构

散列听起来不错。让我们切换到一般树的二叉树表示,其中二叉树的左子树是一般树的第一个子树,而二叉树的右子树是一般树的下一个同级树。你的树现在看起来像这样

      1
     / \
    2   3
   /   / \
  /   /   \
 /   /     \
5   6       4
     \     /
      7   9
       \   \
        8   10
             \
              11
我们可以使用
nil
cons
对这种树Lisp样式进行编码

cons(cons(cons(nil, nil),
          nil),
     cons(cons(nil,
               cons(nil,
                    cons(nil, nil))),
          cons(cons(nil,
                    cons(nil,
                         cons(nil, nil))),
               nil)))
H
为散列值集。如果我们在散列值上指定一个散列值
nil:H
和一个二进制运算符
cons:H*H->H
,那么我们得到一个散列函数。这里有一种可能性。让
f
成为从任意长度字符串到固定长度哈希字符串的一个字符串

nil = f("")
cons(a, b) = f(a + b)

表示有根(子)树的一种方法是使用包含左括号和右括号的字符串。这应该足以让你开始。
nil = f("")
cons(a, b) = f(a + b)