TreeNode * dfsTraverse(TreeNode * root, TreeNode * p , TreeNode * q)
{
//一般來說, 我們會希望一旦DFS函式到達樹的底部就返回,
//因此慣例上會判斷TreeNode是否為NULL,
//而dfsTraverse又希望一旦找到p, q節點就返回
if( root == p || root == q || root == NULL)
{
return root;
}
//一般來說會將左右節點作為新的root再次進行迭代, 差別只有在順序,
//依需求來決定是LVR, LRV, 還是VLR
TreeNode * parent1 = dfsTraverse(root->left, p, q);
TreeNode * parent2 = dfsTraverse(root->right, p, q);
//可以想像成當觸底返回後的sub tree, 我們希望對它做什麼事,
//例如我們希望取得Common Ancestor, 因此回傳parent
if( parent1 && parent2)
{
return root;
}
else
{
return parent1 ? parent1:parent2;
}
}