971. Flip Binary Tree To Match Preorder Traversal
Solution
Traverse the node from root to it's children with DFS, once flip condition is satisfied then flip, otherwise
go the same way till the end.
int index = 0;
public List<Integer> flipMatchVoyage(TreeNode root, int[] voyage) {
List<Integer> ret = new LinkedList<>();
return dfs(root, voyage, ret) ? ret : Arrays.asList(-1);
}
private boolean dfs(TreeNode node, int[] voyage, List<Integer> ret){
if(node == null) return true;
if(node.val != voyage[index]) return false;
index++;
if(node.left != null && node.left.val != voyage[index]){
ret.add(node.val);
return dfs(node.right, voyage, ret) && dfs(node.left, voyage, ret);
}
return dfs(node.left, voyage, ret) && dfs(node.right, voyage, ret);
}
Last updated
Was this helpful?