<p>Design an algorithm and write code to find the first common ancestor of two nodes in a binary tree. Avoid storing additional nodes in a data structure. NOTE: This is not necessarily a binary search tree.</p> <p>For example, Given the following tree: root = [3,5,1,6,2,0,8,null,null,7,4]</p> <pre> 3 / \ 5 1 / \ / \ 6 2 0 8 / \ 7 4 </pre> <p><strong>Example 1:</strong></p> <pre> <strong>Input:</strong> root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 <strong>Input:</strong> 3 <strong>Explanation:</strong> The first common ancestor of node 5 and node 1 is node 3.</pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input:</strong> root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 <strong>Output:</strong> 5 <strong>Explanation:</strong> The first common ancestor of node 5 and node 4 is node 5.</pre> <p><strong>Notes:</strong></p> <ul> <li>All node values are pairwise distinct.</li> <li>p, q are different node and both can be found in the given tree.</li> </ul>