我正在查看一本面试书,其中有一个问题是:
您有两个非常大的二叉树:T1,具有数百万个节点,和T2,具有数百个节点。 创建算法以确定T2是否是T1的子树。
作者提到这可能是一种解决方案:
请注意,此处的问题指定T1具有数百万个节点,这意味着我们应该小心使用多少空间。例如,假设T1有1000万个节点,则仅数据就约为40 mb。我们可以创建表示中序遍历和前序遍历的字符串。如果T2的前序遍历是T1的前序遍历的子字符串,并且T2的中序遍历是T1的中序遍历的子字符串,则T2是T1的子树。
我不太确定为什么如果这些都是真的:
T2-preorder-traversal-string是T1-preorder-traversal-string的子字符串
T2-inorder-traversal-string是T1-inorder-traversal-string的子字符串
那么T2必须是T1的子树(尽管我认为作者的意思是子字符串)。我能得到这种逻辑的解释吗?
编辑:用户BartoszMarcinkowski提出了一个很好的观点。假设两个树都没有重复节点。
您有两个非常大的二叉树:T1,具有数百万个节点,和T2,具有数百个节点。 创建算法以确定T2是否是T1的子树。
作者提到这可能是一种解决方案:
请注意,此处的问题指定T1具有数百万个节点,这意味着我们应该小心使用多少空间。例如,假设T1有1000万个节点,则仅数据就约为40 mb。我们可以创建表示中序遍历和前序遍历的字符串。如果T2的前序遍历是T1的前序遍历的子字符串,并且T2的中序遍历是T1的中序遍历的子字符串,则T2是T1的子树。
我不太确定为什么如果这些都是真的:
T2-preorder-traversal-string是T1-preorder-traversal-string的子字符串
T2-inorder-traversal-string是T1-inorder-traversal-string的子字符串
那么T2必须是T1的子树(尽管我认为作者的意思是子字符串)。我能得到这种逻辑的解释吗?
编辑:用户BartoszMarcinkowski提出了一个很好的观点。假设两个树都没有重复节点。