# Pattern in Labeled Ordered Rooted Trees

Let $T$ be a rooted ordered labeled tree. Find all the vertices where all it's subtrees are equal.

Let $T(v)$ to denote the subtree rooted at $v$. The two trees are equal if they have the same shape and the same label.

# 1 Reduce to a string problem

This problem is interesting because one solution can demonstrate the technique of linearize the ordered tree to a string, and apply string algorithms.

First, we replace every edge in the tree with two directed edges $uv$ and $vu$, where $u$ is closer to the root than $v$. We label $uv$ with $($ and $vu$ with $)$. This will be the new tree we work with.

Let $s(T)$ be a string defined by concatenating the labels on the path by traverse the tree with an euler tour by following the edges in a DFS like manner starting from the root of $T$.

Note $s(T)$ would be a balanced set of parenthesis when $l$ maps vertices to the empty string. Indeed, there is a bijection between unlabeled ordered trees and balanced parenthesis. It's not hard to see this generalizes to the labeled setting.

If $s(T)=s(T')$, then $T=T'$.

A run in a string is a maximal string of the form $a^nb$, where $b$ is a prefix of $a$ and $n\geq 2$. The runs theorem states there are at most $O(n)$ runs, and all of them can be found in $O(n)$ time[1]. Let $a^nb$ be a run in a string, then we call the $a^n$ part the complete repetitions.

Define the vertices with at least $2$ child and all it's subtrees are equal as good vertices. It's easy to $s(T(v))$ for some good vertex $v$ is going to be a complete repetition!

Now if we found a run, it's easy to check if it actually correspond to a good vertex in $O(1)$ time once we did a $O(n)$ time preprocessing.

This allows us to solve the problem in $O(n)$ time.

Alternatively, there is a paper with a linear time algorithm to find all subtree repeats inside a tree[2].

# Reference

[1] M. Crochemore, L. Ilie, **Computing longest previous factor in linear time and applications**, Information Processing Letters. 106 (2008) 75–80.

[2] T. Flouri, K. Kobert, S. Pissis, A. Stamatakis, An optimal algorithm for computing all subtree repeats in trees, in: T. Lecroq, L. Mouchard (Eds.), Combinatorial Algorithms, Springer Berlin Heidelberg, 2013: pp. 269–282 10.1007/978-3-642-45278-9_23.